Udostępnij za pośrednictwem


DataTemplateSelector Klasa

Definicja

Zapewnia sposób wybierania DataTemplate obiektu na podstawie obiektu danych i elementu powiązanego z danymi.

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

Przykłady

W tym przykładzie źródło powiązania jest listą Task obiektów. Jedną z właściwości Task obiektu jest Priority. Istnieją dwa zdefiniowane szablony danych i myTaskTemplateimportantTaskTemplate.

Aby podać logikę, która DataTemplate ma być używana na Priority podstawie wartości obiektu danych, utwórz podklasę DataTemplateSelector i przesłoń metodę SelectTemplate . W poniższym przykładzie SelectTemplate metoda udostępnia logikę umożliwiającą zwrócenie odpowiedniego szablonu na podstawie wartości Priority właściwości. Szablon do zwrócenia znajduje się w zasobach elementu otaczania Window .

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

Następnie możemy zadeklarować element TaskListDataTemplateSelector jako zasób:

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

Aby użyć zasobu selektora szablonu, przypisz go do ItemTemplateSelector właściwości .ListBox Metoda ListBox wywołuje metodę SelectTemplateTaskListDataTemplateSelector dla każdego elementu w podstawowej kolekcji. Wywołanie przekazuje obiekt danych jako parametr elementu. Obiekt DataTemplate zwracany przez metodę jest następnie stosowany do tego obiektu danych.

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

Pełny przykład można znaleźć w temacie Introduction to Data Templating Sample (Wprowadzenie do przykładu tworzenia szablonów danych).

Uwagi

Zazwyczaj tworzy się obiekt DataTemplateSelector , jeśli masz więcej niż jeden DataTemplate dla tego samego typu obiektów i chcesz podać własną logikę, aby wybrać DataTemplate obiekt do zastosowania na podstawie właściwości każdego obiektu danych. Należy pamiętać, że jeśli masz obiekty różnych typów, możesz ustawić DataType właściwość w obiekcie DataTemplate. Jeśli to zrobisz, nie ma potrzeby tworzenia elementu DataTemplateSelector. Ponadto, jeśli masz obiekty tego samego typu, ale z różnymi właściwościami, możesz również rozważyć użycie konwertera DataTrigger danych lub . Aby uzyskać więcej informacji, zobacz Omówienie tworzenia szablonów danych.

Aby utworzyć selektor szablonu, utwórz klasę dziedziczą po DataTemplateSelector metodzie i przesłaniają SelectTemplate ją. Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonu elementu.

Konstruktory

DataTemplateSelector()

Inicjuje nowe wystąpienie klasy DataTemplateSelector.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
SelectTemplate(Object, DependencyObject)

Po przesłonięciu w klasie pochodnej funkcja zwraca wartość opartą DataTemplate na logice niestandardowej.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy