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(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 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
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
templateContent
</DataTemplate>
- Warisan
- Atribut
- Penerapan
Persyaratan Windows
Rangkaian perangkat |
Windows 10 (diperkenalkan dalam 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)
|
Contoh
Contoh berikut menggunakan DataTemplate untuk menampilkan item ListBox. Dalam contoh ini, ListBox terikat ke 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>
<src:Customers x:Key="customers"/>
</Grid.Resources>
<ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Padding="5,0,5,0"
Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding Address}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</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"));
}
}
Public Class Customer
Private _firstName As String
Private _lastName As String
Private _address As String
Public Property FirstName() As String
Get
Return _firstName
End Get
Set(ByVal value As String)
_firstName = value
End Set
End Property
Public Property LastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
End Set
End Property
Public Property Address() As String
Get
Return _address
End Get
Set(ByVal value As String)
_address = value
End Set
End Property
Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
Me.FirstName = firstName
Me.LastName = lastName
Me.Address = address
End Sub
End Class
Public Class Customers
Inherits ObservableCollection(Of Customer)
Public Sub New()
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"))
End Sub
End Class
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)
- Properti HeaderTemplate dan FooterTemplate dari berbagai kelas kontrol item
- ItemPresenter.HeaderTemplate dan ItemPresenter.FooterTemplate
- Properti HeaderTemplate dan FooterTemplate kontrol teks seperti RichEditBox, TextBox
- Properti headerTemplate kontrol seperti ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; beberapa di antaranya juga memiliki FooterTemplate
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 ListBox terikat ke kumpulan Customer
objek dan memiliki properti ItemTemplate yang diatur ke DataTemplate. Saat ListBox dibuat, ListBoxItem dibuat untuk masing-masing Customer
dalam koleksi, dan DataContext dari ListBoxItem diatur ke pelanggan yang sesuai. Dengan kata lain, DataContext dari ListBoxItem pertama diatur ke pelanggan pertama, DataContext dari ListBoxItem 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. |
Riwayat versi
Versi Windows | Versi SDK | Nilai ditambahkan |
---|---|---|
1809 | 17763 | GetElement |
1809 | 17763 | Daur UlangElemen |
Konstruktor
DataTemplate() |
Menginisialisasi instans baru kelas DataTemplate . |
Properti
Dispatcher |
Mendapatkan CoreDispatcher yang dikaitkan dengan objek ini. CoreDispatcher mewakili fasilitas yang dapat mengakses DependencyObject pada utas UI meskipun kode dimulai oleh utas non-UI. (Diperoleh dari DependencyObject) |
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) |