Partager via


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Méthode

Définition

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.

S’applique à