Condividi tramite


DataTemplateSelector Classe

Definizione

Fornisce un modo per scegliere un DataTemplate oggetto in base all'oggetto dati e all'elemento associato a dati.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Ereditarietà
DataTemplateSelector

Esempio

In questo esempio l'origine dell'associazione è un elenco di Task oggetti. Una delle proprietà di un Task oggetto è Priority. Sono definiti due modelli di dati e myTaskTemplateimportantTaskTemplate.

Per fornire la logica per scegliere quale DataTemplate utilizzare in base al Priority valore dell'oggetto dati, creare una sottoclasse di DataTemplateSelector ed eseguire l'override del SelectTemplate metodo. Nell'esempio seguente il SelectTemplate metodo fornisce la logica per restituire il modello appropriato in base al valore della Priority proprietà . Il modello da restituire si trova nelle risorse dell'elemento avvolgente 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

Possiamo quindi dichiarare TaskListDataTemplateSelector come una risorsa.

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

Per usare la risorsa del selettore di modelli, assegnarla alla proprietà ItemTemplateSelector di ListBox. Il ListBox chiama il metodo SelectTemplate del TaskListDataTemplateSelector per ciascuno degli elementi nella raccolta sottostante. La chiamata passa l'oggetto dati come parametro dell'elemento. L'oggetto DataTemplate restituito dal metodo viene quindi applicato all'oggetto dati.

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

Per l'esempio completo, vedere Introduction to Data Templating Sample (Introduzione all'esempio di modelli di dati).

Commenti

In genere, si crea un oggetto DataTemplateSelector quando si dispone di DataTemplate più oggetti per lo stesso tipo di oggetti e si vuole fornire una logica personalizzata per scegliere un DataTemplate oggetto da applicare in base alle proprietà di ogni oggetto dati. Si noti che se si dispone di oggetti di tipi diversi, è possibile impostare la DataType proprietà su DataTemplate. Se si esegue questa operazione, non è necessario creare un oggetto DataTemplateSelector. Inoltre, se si dispone di oggetti dello stesso tipo ma con proprietà diverse, è anche possibile prendere in considerazione l'uso di un DataTrigger convertitore di dati o . Per altre informazioni, vedere Panoramica dei modelli di dati.

Per creare un selettore di modello, creare una classe che eredita da DataTemplateSelector ed eseguire l'override del SelectTemplate metodo . Dopo aver definito la classe, è possibile assegnare un'istanza della classe alla proprietà del selettore del modello dell'elemento.

Costruttori

Nome Descrizione
DataTemplateSelector()

Inizializza una nuova istanza della classe DataTemplateSelector.

Metodi

Nome Descrizione
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
SelectTemplate(Object, DependencyObject)

Quando sottoposto a override in una classe derivata, restituisce un oggetto DataTemplate basato sulla logica personalizzata.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a