DataTemplate Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menjelaskan struktur visual objek data. Gunakan pengikatan data untuk elemen tertentu dalam templat yang menampilkan nilai data.
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
- Warisan
- Atribut
- Penerapan
Contoh
Contoh berikut menggunakan DataTemplate untuk menampilkan item ListView. Dalam contoh ini, ListView terikat dengan kumpulan Customer
objek. DataTemplate berisi kontrol TextBlock yang mengikat properti FirstName
, , LastName
dan Address
. Untuk informasi selengkapnya tentang pengikatan data, lihat Pengikatan data secara mendalam.
<Grid>
<Grid.Resources>
<local:Customers x:Key="customers"/>
</Grid.Resources>
<ListView ItemsSource="{StaticResource customers}"
Width="350" Margin="0,4,0,8">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind LastName}"/>
<TextBlock Text="," Margin="0,0,2,0"/>
<TextBlock Text="{x:Bind FirstName}"/>
</StackPanel>
<TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class Customer
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
public Customer(String firstName, String lastName, String address)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
}
public class Customers : ObservableCollection<Customer>
{
public Customers()
{
Add(new Customer("Michael", "Anderberg",
"12 North Third Street, Apartment 45"));
Add(new Customer("Chris", "Ashton",
"34 West Fifth Street, Apartment 67"));
Add(new Customer("Seo-yun", "Jun",
"56 East Seventh Street, Apartment 89"));
Add(new Customer("Guido", "Pica",
"78 South Ninth Street, Apartment 10"));
}
}
Keterangan
Objek DataTemplate
digunakan sebagai nilai untuk properti ini:
- ItemControl.ItemTemplate (yang diwarisi oleh berbagai kontrol item seperti ListView, GridView, ListBox)
- ContentControl.ContentTemplate (yang diwarisi oleh berbagai kontrol konten seperti Tombol, Bingkai, PengaturanFlyout)
-
HeaderTemplate
danFooterTemplate
properti dari berbagai kelas kontrol item - ItemPresenter.HeaderTemplate dan ItemPresenter.FooterTemplate
-
HeaderTemplate
danFooterTemplate
properti kontrol teks seperti RichEditBox, TextBox -
HeaderTemplate
properti kontrol seperti ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; beberapa di antaranya juga memilikiFooterTemplate
Anda biasanya menggunakan DataTemplate untuk menentukan representasi visual data Anda. Objek DataTemplate sangat berguna saat Anda mengikat ItemsControl seperti ListBox ke seluruh koleksi. Tanpa instruksi tertentu, ListBox menampilkan representasi string objek dalam koleksi. Gunakan DataTemplate untuk menentukan tampilan setiap objek data Anda. Konten DataTemplate Anda menjadi struktur visual objek data Anda.
Anda biasanya menggunakan pengikatan data dalam DataTemplate. Misalnya, misalkan ListView terikat ke kumpulan Customer
objek dan memiliki properti ItemTemplate yang diatur ke DataTemplate. Saat ListView dibuat, ListViewItem dibuat untuk masing-masing Customer
dalam koleksi, dan DataContext dari ListViewItem diatur ke pelanggan yang sesuai. Dengan kata lain, DataContext dari ListViewItem pertama diatur ke pelanggan pertama, DataContext dari ListViewItem kedua diatur ke pelanggan kedua, dan sebagainya. Anda dapat mengikat elemen di DataTemplate untuk memperlihatkan nilai properti yang berasal dari setiap Customer
objek.
Anda juga dapat menggunakan DataTemplate untuk berbagi objek UIElement di beberapa objek ContentControl . Misalnya, Anda memerlukan beberapa tombol pada aplikasi Anda untuk memiliki grafik yang sama. Anda dapat membuat DataTemplate yang berisi grafik dan menggunakannya sebagai ContentTemplate untuk tombol. Templat data untuk ContentTemplate juga dapat menggunakan pengikatan data. Tetapi dalam hal ini konteks data sama dengan elemen tempat templat diterapkan. Biasanya ini adalah satu objek data, dan tidak ada konsep item.
Anda dapat menempatkan DataTemplate sebagai anak langsung dari elemen properti ItemTemplate di XAML. Ini dikenal sebagai templat sebaris dan Anda akan melakukan ini jika Anda tidak perlu menggunakan templat data yang sama untuk area lain UI Anda. Anda juga dapat menentukan DataTemplate sebagai sumber daya lalu mereferensikan sumber daya sebagai nilai properti ItemTemplate . Setelah sumber daya, Anda dapat menggunakan templat yang sama untuk beberapa elemen UI yang memerlukan templat data. Jika Anda memperhitungkan templat data ke dalam Application.Resources, Anda bahkan dapat berbagi templat yang sama untuk halaman UI yang berbeda.
Penggunaan XAML untuk konten templat data tidak diekspos sebagai properti kode yang dapat diatur. Ini adalah perilaku khusus yang dibangun ke dalam pemrosesan XAML untuk DataTemplate.
Untuk skenario pengikatan data tingkat lanjut, Anda mungkin ingin memiliki properti data yang menentukan templat mana yang harus menghasilkan representasi UI mereka. Untuk skenario ini, Anda dapat menggunakan DataTemplateSelector dan mengatur properti seperti ItemTemplateSelector untuk menetapkannya ke tampilan data. DataTemplateSelector adalah kelas logika yang Anda tulis sendiri, yang memiliki metode yang mengembalikan tepat satu DataTemplate ke mesin pengikatan berdasarkan logika Anda sendiri yang berinteraksi dengan data Anda. Untuk informasi selengkapnya, lihat Pengikatan data secara mendalam.
Properti terlampir XAML
DataTemplate adalah kelas layanan host untuk properti terlampir XAML.
Untuk mendukung akses prosesor XAML ke properti terlampir, dan juga untuk mengekspos operasi dapatkan dan atur yang setara ke kode, setiap properti terlampir XAML memiliki sepasang metode aksesor Get and Set. Cara lain untuk mendapatkan atau mengatur nilai dalam kode adalah dengan menggunakan sistem properti dependensi, memanggil GetValue atau SetValue dan meneruskan bidang pengidentifikasi sebagai pengidentifikasi properti dependensi.
Properti terlampir | Deskripsi |
---|---|
ExtensionInstance | Mendapatkan atau mengatur instans ekstensi yang menentukan metode pembantu untuk penyajian templat data bertahap.
|
Konstruktor
DataTemplate() |
Menginisialisasi instans baru kelas DataTemplate . |
Properti
Dispatcher |
Selalu kembali |
DispatcherQueue |
|
ExtensionInstanceProperty |
Mengidentifikasi properti extensionInstance XAML terlampir. |
Properti yang Terlampir
ExtensionInstance |
Mendapatkan atau mengatur instans ekstensi yang menentukan metode pembantu untuk penyajian templat data bertahap. |
Metode
ClearValue(DependencyProperty) |
Menghapus nilai lokal properti dependensi. (Diperoleh dari DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Mengembalikan nilai dasar apa pun yang ditetapkan untuk properti dependensi, yang akan berlaku dalam kasus di mana animasi tidak aktif. (Diperoleh dari DependencyObject) |
GetElement(ElementFactoryGetArgs) |
Membuat atau mengambil instans objek UIElement yang ada yang dideklarasikan dalam DataTemplate. |
GetExtensionInstance(FrameworkElement) |
Mendapatkan nilai properti terlampir DataTemplate.ExtensionInstance XAML untuk elemen target. |
GetValue(DependencyProperty) |
Mengembalikan nilai efektif properti dependensi saat ini dari DependencyObject. (Diperoleh dari DependencyObject) |
LoadContent() |
Membuat objek UIElement di DataTemplate. |
ReadLocalValue(DependencyProperty) |
Mengembalikan nilai lokal properti dependensi, jika nilai lokal ditetapkan. (Diperoleh dari DependencyObject) |
RecycleElement(ElementFactoryRecycleArgs) |
Mendaur ulang UIElement yang sebelumnya diambil menggunakan GetElement. |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Mendaftarkan fungsi pemberitahuan untuk mendengarkan perubahan pada DependencyProperty tertentu pada instans DependencyObject ini. (Diperoleh dari DependencyObject) |
SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Mengatur nilai properti terlampir DataTemplate.ExtensionInstance XAML untuk elemen target. |
SetValue(DependencyProperty, Object) |
Mengatur nilai lokal properti dependensi pada DependencyObject. (Diperoleh dari DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Membatalkan pemberitahuan perubahan yang sebelumnya terdaftar dengan memanggil RegisterPropertyChangedCallback. (Diperoleh dari DependencyObject) |