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.
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) |