DataTemplateSelector Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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) |