DataTemplateSelector.SelectTemplate(Object, DependencyObject) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
En cas de substitution dans une classe dérivée, retourne un DataTemplate basé sur la logique personnalisée.
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
Paramètres
- item
- Object
Objet de données pour lequel sélectionner le modèle.
- container
- DependencyObject
Objet lié aux données.
Retours
Retourne un type DataTemplate ou null
. La valeur par défaut est null
.
Exemples
Dans cet exemple, la source de liaison est une liste d’objets Task
. L’une des propriétés d’un Task
objet est Priority
. Deux modèles de données sont définis, myTaskTemplate
et importantTaskTemplate
.
Pour fournir une logique à choisir DataTemplate en fonction de la valeur de l’objet Priority
de données, créez une sous-classe de DataTemplateSelector et remplacez la SelectTemplate méthode. Dans l’exemple suivant, la méthode fournit une SelectTemplate logique pour renvoyer le modèle approprié en fonction de la valeur de la Priority
propriété. Le modèle à retourner se trouve dans les ressources de l’élément enveloppant 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
On peut ensuite déclarer le TaskListDataTemplateSelector
comme ressource :
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Pour utiliser la ressource de sélecteur de modèle, affectez-la à la ItemTemplateSelector propriété du ListBox. Appelle ListBox la SelectTemplate méthode de pour TaskListDataTemplateSelector
chacun des éléments de la collection sous-jacente. L’appel passe l’objet de données en paramètre d’élément. Le DataTemplate qui est retourné par la méthode est ensuite appliqué à cet objet de données.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Vous trouverez l’exemple complet sur la page Présentation d’un exemple de création de modèles de données.
Remarques
En règle générale, vous utilisez un sélecteur de modèle lorsque vous avez plusieurs modèles de données définis pour le même type d’objets. Par exemple, si votre source de liaison répertorie une liste d’objets étudiants et que vous souhaitez appliquer un modèle particulier aux étudiants à temps partiel. Pour ce faire, créez une classe qui hérite de DataTemplateSelector la méthode et la SelectTemplate remplace. Une fois votre classe définie, vous pouvez affecter une instance de la classe à la propriété sélecteur de modèle de votre élément.