DataTemplateSelector Sınıf

Tanım

Veri nesnesine ve veriye bağlı öğeye göre bir DataTemplate seçmek için bir yol sağlar.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Devralma
DataTemplateSelector

Örnekler

Bu örnekte bağlama kaynağı bir nesne listesidir Task . Bir Task nesnenin özelliklerinden biri de şeklindedir Priority. tanımlanmış myTaskTemplate iki veri şablonu vardır ve importantTaskTemplate.

Veri nesnesinin değerine göre hangisinin DataTemplate kullanılacağını seçmek üzere mantık sağlamak için bir alt sınıfı DataTemplateSelector oluşturun ve yöntemini geçersiz kılınSelectTemplate.Priority Aşağıdaki örnekte yöntemi, özelliğinin SelectTemplate değerine Priority göre uygun şablonu döndürmek için mantık sağlar. Döndürülecek şablon, zarflama Window öğesinin kaynaklarında bulunur.

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

Ardından öğesini TaskListDataTemplateSelector kaynak olarak bildirebiliriz:

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

Şablon seçici kaynağını kullanmak için, öğesinin ItemTemplateSelector özelliğine atayın ListBox. , ListBox temel alınan koleksiyondaki öğelerin her biri için yöntemini TaskListDataTemplateSelector çağırırSelectTemplate. çağrısı, veri nesnesini öğe parametresi olarak geçirir. DataTemplate yöntemi tarafından döndürülen daha sonra bu veri nesnesine uygulanır.

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

Tam örnek için bkz. Veri Şablon Oluşturma Örneğine Giriş.

Açıklamalar

Genellikle, aynı tür nesneler için birden DataTemplate fazla nesneniz olduğunda ve her veri nesnesinin özelliklerine göre uygulanacak öğesini DataTemplate seçmek için kendi mantığınızı sağlamak istediğinizde bir DataTemplateSelector oluşturursunuz. Farklı türlerdeki nesneleriniz varsa özelliğini üzerinde ayarlayabileceğinizi DataType DataTemplateunutmayın. Bunu yaparsanız, oluşturmanıza DataTemplateSelectorgerek yoktur. Ayrıca, aynı türde ancak farklı özelliklere sahip nesneleriniz varsa veya veri dönüştürücüsü kullanmayı DataTrigger da düşünebilirsiniz. Daha fazla bilgi için bkz. Veri Şablonu Oluşturmaya Genel Bakış.

Şablon seçici oluşturmak için yöntemini devralan ve geçersiz kılan DataTemplateSelector SelectTemplate bir sınıf oluşturun. Sınıfınız tanımlandıktan sonra, öğesinin şablon seçici özelliğine sınıfının bir örneğini atayabilirsiniz.

Oluşturucular

DataTemplateSelector()

DataTemplateSelector sınıfının yeni bir örneğini başlatır.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
SelectTemplate(Object, DependencyObject)

Türetilmiş bir sınıfta geçersiz kılındığında, özel mantığı temel alan bir DataTemplate döndürür.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır