Sdílet prostřednictvím


DataTemplateSelector Třída

Definice

Poskytuje způsob, jak zvolit objekt DataTemplate na základě datového objektu a prvku vázaného na data.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Dědičnost
DataTemplateSelector

Příklady

V tomto příkladu je zdrojem vazby seznam Task objektů. Jednou z vlastností objektu Task je Priority. Jsou definovány dvě šablony dat, myTaskTemplate a importantTaskTemplate.

Chcete-li zadat logiku pro výběr, který DataTemplate se má použít na Priority základě hodnoty datového objektu, vytvořte podtřídu DataTemplateSelector a přepište metodu SelectTemplate . V následujícím příkladu metoda poskytuje logiku SelectTemplate pro vrácení příslušné šablony na základě hodnoty Priority vlastnosti . Šablona, která se má vrátit, se nachází v prostředcích elementu obálky 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

Pak můžeme deklarovat TaskListDataTemplateSelector jako prostředek:

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

Pokud chcete použít prostředek selektoru šablon, přiřaďte ho ItemTemplateSelectorListBoxk vlastnosti . Volá ListBox metodu SelectTemplateTaskListDataTemplateSelector pro každou položku v podkladové kolekci. Volání předá datový objekt jako parametr položky. Objekt DataTemplate vrácený metodou se pak použije na tento datový objekt.

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

Kompletní ukázku najdete v tématu Úvod do ukázky šablon dat.

Poznámky

Obvykle se vytváří DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku pro volbu DataTemplate , která se použije na základě vlastností každého datového objektu. Všimněte si, že pokud máte objekty různých typů, můžete nastavit DataType vlastnost v objektu DataTemplate. Pokud to uděláte, není potřeba vytvářet DataTemplateSelector. Pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger převaděče dat nebo . Další informace najdete v tématu Přehled šablon dat.

Pokud chcete vytvořit selektor šablony, vytvořte třídu, která dědí z DataTemplateSelector a přepíše metodu SelectTemplate . Jakmile je vaše třída definována, můžete přiřadit instanci třídy k selektoru šablony vlastnost prvku.

Konstruktory

DataTemplateSelector()

Inicializuje novou instanci DataTemplateSelector třídy .

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
SelectTemplate(Object, DependencyObject)

Při přepsání v odvozené třídě vrátí hodnotu na DataTemplate základě vlastní logiky.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro