DataTemplateSelector Klasa

Definicja

Zapewnia sposób wyboru na DataTemplate podstawie obiektu danych i elementu powiązanego z danymi.Provides a way to choose a DataTemplate based on the data object and the data-bound element.

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.In this example, the binding source is a list of Task objects. Jedną z właściwości Task obiektu jest Priority .One of the properties of a Task object is Priority. Zdefiniowano dwa szablony danych myTaskTemplate i importantTaskTemplate .There are two data templates defined, myTaskTemplate and importantTaskTemplate.

Aby określić logikę do wyboru DataTemplate , która ma być używana na podstawie Priority wartości obiektu danych, należy utworzyć podklasę DataTemplateSelector i zastąpić SelectTemplate metodę.To supply logic to choose which DataTemplate to use based on the Priority value of the data object, create a subclass of DataTemplateSelector and override the SelectTemplate method. W poniższym przykładzie SelectTemplate Metoda udostępnia logikę do zwrócenia odpowiedniego szablonu na podstawie wartości Priority właściwości.In the following example, the SelectTemplate method provides logic to return the appropriate template based on the value of the Priority property. Szablon do zwrócenia znajduje się w zasobach elementu obejmujących Window .The template to return is found in the resources of the enveloping Window element.

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żna zadeklarować TaskListDataTemplateSelector jako zasób:We can then declare the TaskListDataTemplateSelector as a resource:

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

Aby użyć zasobu selektora szablonów, przypisz go do ItemTemplateSelector właściwości ListBox .To use the template selector resource, assign it to the ItemTemplateSelector property of the ListBox. ListBoxWywołuje SelectTemplate metodę TaskListDataTemplateSelector dla każdego elementu w kolekcji źródłowej.The ListBox calls the SelectTemplate method of the TaskListDataTemplateSelector for each of the items in the underlying collection. Wywołanie przekazuje obiekt danych jako parametr elementu.The call passes the data object as the item parameter. Wartość DataTemplate zwracana przez metodę jest następnie stosowana do tego obiektu danych.The DataTemplate that is returned by the method is then applied to that data object.

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

Pełny przykład można znaleźć w artykule wprowadzenie do danych tworzenia szablonów Sample.For the complete sample, see Introduction to Data Templating Sample.

Uwagi

Zazwyczaj tworzysz, DataTemplateSelector gdy masz więcej niż jeden DataTemplate dla tego samego typu obiektów i chcesz dostarczyć własną logikę do wyboru, DataTemplate która ma zostać zastosowana na podstawie właściwości każdego obiektu danych.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. Należy pamiętać, że jeśli masz obiekty różnych typów, możesz ustawić DataType Właściwość na DataTemplate .Note that if you have objects of different types you can set the DataType property on the DataTemplate. W takim przypadku nie trzeba tworzyć DataTemplateSelector .If you do that then there is no need to create a 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 DataTrigger konwertera danych lub.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Aby uzyskać więcej informacji, zobacz tworzenia szablonów danych — omówienie.For more information, see Data Templating Overview.

Aby utworzyć selektor szablonu, Utwórz klasę, która dziedziczy z DataTemplateSelector i przesłania SelectTemplate metodę.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonów elementu.Once your class is defined you can assign an instance of the class to the template selector property of your element.

Konstruktory

DataTemplateSelector()

Inicjuje nowe wystąpienie klasy DataTemplateSelector.Initializes a new instance of the DataTemplateSelector class.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
SelectTemplate(Object, DependencyObject)

Gdy jest zastępowany w klasie pochodnej, zwraca na DataTemplate podstawie logiki niestandardowej.When overridden in a derived class, returns a DataTemplate based on custom logic.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Dotyczy