Partager via


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Méthode

Définition

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.

S’applique à