Sdílet prostřednictvím


DataTemplateSelector Třída

Definice

Poskytuje způsob, jak zvolit 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 myTaskTemplate dvě šablony dat a importantTaskTemplate.

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

Chcete-li použít prostředek selektoru šablony, přiřaďte ho k vlastnosti ItemTemplateSelector u ListBox. ListBox volá metodu SelectTemplate z TaskListDataTemplateSelector pro každou položku v rámci podkladové kolekce. Volání předá datový objekt jako parametr položky. 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 vytvoříte DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku, která DataTemplate se má použít 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 vlastnost nastavit DataType na DataTemplate. Pokud to uděláte, není nutné vytvořit DataTemplateSelector. Kromě toho, pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger nebo převaděč dat. Další informace najdete v tématu Přehled šablon dat.

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

Konstruktory

Name Description
DataTemplateSelector()

Inicializuje novou instanci DataTemplateSelector třídy.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

Slouží jako výchozí funkce hash.

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

Získá Type aktuální instance.

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

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

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

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

ToString()

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

(Zděděno od Object)

Platí pro