Bagikan melalui


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metode

Definisi

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.

Berlaku untuk