Condividi tramite


DataTemplateSelector Classe

Definizione

Implementa un modo per scegliere un oggetto DataTemplate 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 di associazione è un elenco di Task oggetti. Una delle proprietà di un Task oggetto è Priority. Esistono due modelli di dati definiti myTaskTemplate e importantTaskTemplate.

Per specificare la logica per scegliere quale DataTemplate usare in base al Priority valore dell'oggetto dati, creare una sottoclasse di DataTemplateSelector e 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

È quindi possibile dichiarare il TaskListDataTemplateSelector come risorsa:

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

Per usare la ItemTemplateSelector risorsa del selettore modello, assegnarla alla proprietà di ListBox. Chiama ListBox il SelectTemplate metodo dell'oggetto TaskListDataTemplateSelector per ognuno degli elementi della raccolta sottostante. La chiamata passa l'oggetto dati come parametro di elemento. L'oggetto DataTemplate restituito dal metodo viene quindi applicato a tale 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 a un esempio di applicazione di modello).

Commenti

In genere, si crea un oggetto DataTemplateSelector quando si dispone di più di uno DataTemplate 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 DataTemplateSelectoroggetto . Inoltre, se si hanno oggetti dello stesso tipo, ma con proprietà diverse, è anche possibile usare un DataTrigger convertitore di dati o un convertitore di dati. Per altre informazioni, vedere Panoramica del templating dei dati.

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

Costruttori

DataTemplateSelector()

Inizializza una nuova istanza della classe DataTemplateSelector.

Metodi

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 l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SelectTemplate(Object, DependencyObject)

In caso di 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