DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metod

Definition

När den åsidosätts i en härledd klass returneras en DataTemplate baserad på anpassad logik.

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

Parametrar

item
Object

Det dataobjekt som mallen ska väljas för.

container
DependencyObject

Det databundna objektet.

Returer

Returnerar en DataTemplate eller null. Standardvärdet är null.

Exempel

I det här exemplet är bindningskällan en lista över Task objekt. En av egenskaperna för ett Task objekt är Priority. Det finns två definierade myTaskTemplate datamallar och importantTaskTemplate.

Om du vill ange logik för att välja vilken som DataTemplate ska användas baserat på värdet för Priority dataobjektet skapar du en underklass av DataTemplateSelector och åsidosätter SelectTemplate metoden. I följande exempel SelectTemplate tillhandahåller metoden logik för att returnera lämplig mall baserat på egenskapens Priority värde. Mallen som ska returneras finns i resurserna i det omslutande Window elementet.

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

Vi kan sedan deklarera TaskListDataTemplateSelector som en resurs:

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

För att använda resursen för mallväljaren, tilldela den till ItemTemplateSelector-egenskapen av ListBox. ListBox anropar metoden SelectTemplate av TaskListDataTemplateSelector för varje objekt i den underliggande samlingen. Anropet skickar dataobjektet som objektparameter. Det DataTemplate som returneras av metoden tillämpas sedan på det dataobjektet.

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

För det kompletta exemplet, se Introduktion till datamall-exemplet.

Kommentarer

Vanligtvis använder du en mallväljare när du har fler än en datamall definierad för samma typ av objekt. Om din bindningskälla till exempel är en lista över elevobjekt och du vill tillämpa en viss mall på deltidsstudenterna. Du kan göra detta genom att skapa en klass som ärver från DataTemplateSelector och åsidosätter SelectTemplate metoden. När klassen har definierats kan du tilldela en instans av klassen till mallväljaregenskapen för ditt element.

Gäller för