DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metode
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.
Saat ditimpa di kelas turunan DataTemplate , mengembalikan berdasarkan logika kustom.
public:
virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate
Parameter
- item
- Object
Objek data yang akan dipilih templatnya.
- container
- DependencyObject
Objek terikat data.
Mengembalikan
Mengembalikan DataTemplate atau null. Nilai defaultnya adalah null.
Contoh
Dalam contoh ini, sumber pengikatan adalah daftar Task objek. Salah satu properti Task objek adalah Priority. Ada dua templat data yang ditentukan, myTaskTemplate dan importantTaskTemplate.
Untuk menyediakan logika untuk memilih DataTemplate mana yang akan digunakan berdasarkan nilai Priority objek data, buat subkelas DataTemplateSelector dan ambil alih metode SelectTemplate. Dalam contoh berikut, metode SelectTemplate menyediakan logika untuk mengembalikan templat yang sesuai berdasarkan nilai properti Priority. Templat yang akan dikembalikan ditemukan dalam sumber daya elemen Window yang menyelimuti.
using System.Windows;
using System.Windows.Controls;
namespace SDKSample
{
public class TaskListDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Task)
{
Task taskitem = item as Task;
if (taskitem.Priority == 1)
return
element.FindResource("importantTaskTemplate") as DataTemplate;
else
return
element.FindResource("myTaskTemplate") as DataTemplate;
}
return null;
}
}
}
Namespace SDKSample
Public Class TaskListDataTemplateSelector
Inherits DataTemplateSelector
Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
Dim element As FrameworkElement
element = TryCast(container, FrameworkElement)
If element IsNot Nothing AndAlso item IsNot Nothing AndAlso TypeOf item Is Task Then
Dim taskitem As Task = TryCast(item, Task)
If taskitem.Priority = 1 Then
Return TryCast(element.FindResource("importantTaskTemplate"), DataTemplate)
Else
Return TryCast(element.FindResource("myTaskTemplate"), DataTemplate)
End If
End If
Return Nothing
End Function
End Class
End Namespace
Kita kemudian dapat mendeklarasikan TaskListDataTemplateSelector sebagai sumber daya:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Untuk menggunakan sumber daya selektor template, tetapkan pada properti ItemTemplateSelector dari ListBox.
ListBox memanggil metode SelectTemplate dari TaskListDataTemplateSelector untuk setiap item dalam koleksi dasar. Panggilan meneruskan objek data sebagai parameter item.
DataTemplate yang dikembalikan oleh metode kemudian diterapkan ke objek data tersebut.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Untuk sampel lengkapnya, lihat Pengenalan Sampel Templat Data.
Keterangan
Biasanya, Anda menggunakan pemilih templat saat Anda memiliki lebih dari satu templat data yang ditentukan untuk jenis objek yang sama. Misalnya, jika sumber pengikatan Anda mencantumkan daftar objek siswa dan Anda ingin menerapkan templat tertentu ke siswa paruh waktu. Anda dapat melakukan ini dengan membuat kelas yang mewarisi dan DataTemplateSelector mengambil alih SelectTemplate metode . Setelah kelas ditentukan, Anda dapat menetapkan instans kelas ke properti pemilih templat elemen Anda.