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 une fonction basée sur une DataTemplate 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 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. Il existe deux modèles de données définis et myTaskTemplateimportantTaskTemplate.
Pour fournir une logique permettant de choisir quel DataTemplate utiliser en fonction de la valeur de Priority de l'objet de données, créez une sous-classe de DataTemplateSelector et remplacez la méthode SelectTemplate. Dans l’exemple suivant, la SelectTemplate méthode fournit une logique pour retourner 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
Nous pouvons ensuite déclarer TaskListDataTemplateSelector comme une 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.
ListBox appelle la méthode SelectTemplate de TaskListDataTemplateSelector pour chacun des éléments de la collection sous-jacente. L’appel transmet l’objet de données en tant que paramètre d’élément. Le DataTemplate 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"/>
Pour obtenir l’exemple complet, consultez Introduction à l’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, vous pouvez créer une classe qui hérite de DataTemplateSelector la méthode et la SelectTemplate remplace. Une fois que votre classe est définie, vous pouvez affecter une instance de la classe à la propriété de sélecteur de modèle de votre élément.