Sdílet prostřednictvím


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metoda

Definice

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

public:
 virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate (object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate

Parametry

item
Object

Datový objekt, pro který chcete šablonu vybrat.

container
DependencyObject

Objekt vázaný na data.

Návraty

Vrátí hodnotu DataTemplate nebo null. Výchozí hodnota je null.

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 a myTaskTemplateimportantTaskTemplate.

Pokud chcete zadat logiku pro volbu, kterou DataTemplate použít na základě hodnoty datového objektu, vytvořte podtřídu DataTemplateSelector a přepište metoduSelectTemplate.Priority 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 šablony, přiřaďte ho ListBoxk ItemTemplateSelector vlastnosti . SelectTemplate Volání ListBox metody TaskListDataTemplateSelector pro každou z položek 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

Selektor šablony se obvykle používá, pokud máte pro stejný typ objektů definovaných více než jednu šablonu dat. Pokud je zdrojem vazby například seznam objektů studentů a chcete použít konkrétní šablonu pro studenty na částečný úvazek. Můžete to provést vytvořením třídy, která dědí z DataTemplateSelector a přepsání SelectTemplate metody. Jakmile je vaše třída definována, můžete přiřadit instanci třídy k vlastnosti selektoru šablony elementu.

Platí pro