Bagikan melalui


DataTemplate Kelas

Definisi

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
Object IInspectable DependencyObject FrameworkTemplate DataTemplate
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, , LastNamedan 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:

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)

Berlaku untuk

Lihat juga