Freigeben über


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Methode

Definition

Gibt beim Überschreiben in einer abgeleiteten Klasse eine auf benutzerdefinierter Logik basierende DataTemplate zurück.

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

Parameter

item
Object

Das Datenobjekt, für das die Vorlage ausgewählt werden soll.

container
DependencyObject

Das datengebundene Objekt.

Gibt zurück

DataTemplate

Gibt einen DataTemplate- oder null-Wert zurück. Der Standardwert ist null.

Beispiele

In diesem Beispiel ist die Bindungsquelle eine Liste von Task Objekten. Eine der Eigenschaften eines Task Objekts ist Priority. Es sind zwei Datenvorlagen definiert, myTaskTemplate und importantTaskTemplate.

Wenn Sie Logik angeben möchten, die DataTemplate auf der Grundlage des Priority Werts des Datenobjekts verwendet werden soll, erstellen Sie eine Unterklasse von DataTemplateSelector und überschreiben Sie die SelectTemplate Methode. Im folgenden Beispiel stellt die SelectTemplate Methode Logik bereit, um die entsprechende Vorlage basierend auf dem Wert der Priority Eigenschaft zurückzugeben. Die zurückzugebende Vorlage wird in den Ressourcen des Enveloping-Elements Window gefunden.

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

Wir können dann den TaskListDataTemplateSelector als Ressource deklarieren:

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

Weisen Sie sie der ItemTemplateSelector Eigenschaft der ListBoxVorlage zu, um die Vorlagenauswahlressource zu verwenden. Die ListBox Methode der TaskListDataTemplateSelector einzelnen Elemente in der zugrunde liegenden Auflistung wird aufgerufenSelectTemplate. Beim Aufruf wird das Datenobjekt als Elementparameter übergeben. Die DataTemplate von der Methode zurückgegebene Methode wird dann auf dieses Datenobjekt angewendet.

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

Das vollständige Beispiel finden Sie unter Einführung in das Datenvorlagenbeispiel.

Hinweise

In der Regel verwenden Sie eine Vorlagenauswahl, wenn mehrere Datenvorlagen für denselben Objekttyp definiert sind. Wenn Ihre Bindungsquelle beispielsweise eine Liste von Kursteilnehmerobjekten auflistet und Sie eine bestimmte Vorlage auf die Teilzeitstudenten anwenden möchten. Sie können dies tun, indem Sie eine Klasse erstellen, die von DataTemplateSelector der SelectTemplate Methode erbt und überschreibt. Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft des Elements eine Instanz der Klasse zuweisen.

Gilt für