Nyelv

DataTemplateSelector Osztály

Definíció

Lehetővé teszi az adatobjektum és az adatkötésű elem alapján történő választást DataTemplate .

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Öröklődés
DataTemplateSelector

Példák

Ebben a példában a kötés forrása az objektumok listája Task . Az objektum egyik tulajdonsága Task a .Priority Két adatsablon van definiálva, myTaskTemplate és importantTaskTemplatea .

Annak érdekében, hogy logikát biztosítson az adatobjektum értéke alapján választható DataTemplate kiválasztásához, hozzon létre egy Priority alosztályt, és írja felül a DataTemplateSelector metódust. Az alábbi példában a metódus logikát SelectTemplate biztosít a megfelelő sablon visszaadásához a Priority tulajdonság értéke alapján. A visszaadandó sablon a burkolóelem Window erőforrásaiban található.

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

Ezt követően deklarálhatjuk erőforrásként TaskListDataTemplateSelector :

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

A sablonválasztó erőforrás használatához rendelje hozzá a ItemTemplateSelector tulajdonságához a ListBox-t. A ListBox rendszer meghívja az SelectTemplateTaskListDataTemplateSelector alapul szolgáló gyűjtemény egyes elemeinek metódusát. A hívás elemparaméterként továbbítja az adatobjektumot. A DataTemplate metódus által visszaadott érték ezután az adott adatobjektumra lesz alkalmazva.

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

A teljes minta megtekintéséhez lásd: Bevezetés az adatsablonozási mintába.

Megjegyzések

Általában akkor hoz létre, DataTemplateSelector ha egynél DataTemplate több objektummal rendelkezik ugyanahhoz az objektumtípushoz, és saját logikát szeretne megadni, hogy az egyes adatobjektumok tulajdonságai alapján válasszon ki egy DataTemplate alkalmazást. Vegye figyelembe, hogy ha különböző típusú objektumokkal rendelkezik, beállíthatja a DataType tulajdonságot a DataTemplate. Ha ezt teszi, akkor nem kell létrehoznia egy DataTemplateSelector. Továbbá, ha azonos típusú, de eltérő tulajdonságokkal rendelkező objektumokkal rendelkezik, érdemes lehet egy DataTrigger vagy egy adatkonvertert is használnia. További információ: Data Templating Overview.

Sablonválasztó létrehozásához hozzon létre egy osztályt, amely örökli DataTemplateSelector és felülbírálja a metódust SelectTemplate . Az osztály definiálása után hozzárendelheti az osztály egy példányát az elem sablonválasztó tulajdonságához.

Konstruktorok

Név Description
DataTemplateSelector()

Inicializálja a DataTemplateSelector osztály új példányát.

Metódusok

Név Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
SelectTemplate(Object, DependencyObject)

Ha egy származtatott osztályban felül van bírálva, az egyéni logikán alapuló értéket ad vissza DataTemplate .

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes: