DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metodo
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.
In caso di override in una classe derivata, restituisce un oggetto DataTemplate basato sulla logica personalizzata.
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
Parametri
- item
- Object
Oggetto dati per cui selezionare il modello.
- container
- DependencyObject
Oggetto associato a dati.
Restituisce
Restituisce un valore DataTemplate o null
. Il valore predefinito è null
.
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 myTaskTemplate
importantTaskTemplate
.
Per specificare 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
È quindi possibile dichiarare il TaskListDataTemplateSelector
come risorsa:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Per usare la risorsa del selettore del modello, assegnarla alla ItemTemplateSelector proprietà di ListBox. Chiama ListBox il SelectTemplate metodo di TaskListDataTemplateSelector
per ognuno degli elementi nella raccolta sottostante. La chiamata passa l'oggetto dati come parametro di 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 a un esempio di applicazione di modello).
Commenti
In genere, si usa un selettore di modello quando sono definiti più modelli di dati per lo stesso tipo di oggetti. Ad esempio, se l'origine dell'associazione è un elenco di oggetti studente e si vuole applicare un modello specifico agli studenti part-time. A tale scopo, è possibile creare una classe che eredita da DataTemplateSelector ed esegue l'override del SelectTemplate metodo . Dopo aver definito la classe, è possibile assegnare un'istanza della classe alla proprietà del selettore del modello dell'elemento.