Compartir a través de


DataTemplateSelector Clase

Definición

Proporciona una manera de elegir un elemento DataTemplate según el objeto de datos y el elemento enlazado a datos.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Herencia
DataTemplateSelector

Ejemplos

En este ejemplo, el origen del enlace es una lista de Task objetos. Una de las propiedades de un Task objeto es Priority. Hay dos plantillas de datos definidas y myTaskTemplateimportantTaskTemplate.

Para proporcionar lógica para elegir qué DataTemplate usar basado en el valor Priority del objeto de datos, cree una subclase de DataTemplateSelector e invalide el método SelectTemplate. En el ejemplo siguiente, el método SelectTemplate proporciona la lógica que devuelve la plantilla adecuada en función del valor de la propiedad Priority. La plantilla que se devuelve se encuentra en los recursos del elemento envolvente 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

Podemos declarar el TaskListDataTemplateSelector como recurso:

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

Para usar el recurso de selector de plantilla, asígnelo a la propiedad ItemTemplateSelector de ListBox. ListBox llama al método SelectTemplate de TaskListDataTemplateSelector para cada uno de los elementos de la colección subyacente. La llamada pasa el objeto de datos como parámetro del elemento. Después, el elemento DataTemplate devuelto por el método se aplica a ese objeto de datos.

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

Para obtener el ejemplo completo, vea Introducción a la aplicación de plantillas de ejemplo.

Comentarios

Normalmente, se crea un DataTemplateSelector cuando tiene más de uno DataTemplate para el mismo tipo de objetos y desea proporcionar su propia lógica para elegir una DataTemplate que se aplique en función de las propiedades de cada objeto de datos. Tenga en cuenta que si tiene objetos de diferentes tipos, puede establecer la DataType propiedad en .DataTemplate Si lo hace, no es necesario crear un DataTemplateSelector. Además, si tiene objetos del mismo tipo, pero con propiedades diferentes, también puede considerar el uso de un DataTrigger convertidor de datos o . Para obtener más información, consulte Información general sobre plantillas de datos.

Para crear un selector de plantillas, cree una clase que herede DataTemplateSelector de e invalide el SelectTemplate método . Una vez definida la clase, puede asignar una instancia de la clase a la propiedad selector de plantillas del elemento.

Constructores

DataTemplateSelector()

Inicializa una nueva instancia de la clase DataTemplateSelector.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
SelectTemplate(Object, DependencyObject)

Si se reemplaza en una clase derivada, devuelve un valor DataTemplate basado en una lógica personalizada.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a