DataTemplateSelector Class

Definición

Proporciona una manera de elegir un elemento DataTemplate según el objeto de datos y el elemento enlazado a datos. Provides a way to choose a DataTemplate based on the data object and the data-bound element.

public class DataTemplateSelector
Herencia
DataTemplateSelector

Ejemplos

En este ejemplo, el origen de enlace es una lista de Task objetos.In this example, the binding source is a list of Task objects. Una de las propiedades de un Task objeto es Priority.One of the properties of a Task object is Priority. Hay dos plantillas de datos definidas, myTaskTemplate y importantTaskTemplate.There are two data templates defined, myTaskTemplate and importantTaskTemplate.

Para proporcionar lógica para elegir qué DataTemplate utilizar según la Priority valor del objeto de datos, cree una subclase de DataTemplateSelector e invalidar la SelectTemplate método.To supply logic to choose which DataTemplate to use based on the Priority value of the data object, create a subclass of DataTemplateSelector and override the SelectTemplate method. En el ejemplo siguiente, la SelectTemplate método proporciona la lógica para devolver la plantilla adecuada en función del valor de la Priority propiedad.In the following example, the SelectTemplate method provides logic to return the appropriate template based on the value of the Priority property. La plantilla que se devuelve se encuentra en los recursos de la envoltura Window elemento.The template to return is found in the resources of the enveloping Window element.

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:We can then declare the TaskListDataTemplateSelector as a resource:

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

Para usar el recurso del selector de plantillas, asígnelo a la ItemTemplateSelector propiedad de la ListBox.To use the template selector resource, assign it to the ItemTemplateSelector property of the ListBox. El ListBox llamadas la SelectTemplate método de la TaskListDataTemplateSelector para cada uno de los elementos de la colección subyacente.The ListBox calls the SelectTemplate method of the TaskListDataTemplateSelector for each of the items in the underlying collection. La llamada pasa el objeto de datos como parámetro del elemento.The call passes the data object as the item parameter. El DataTemplate devuelta por el método, a continuación, se aplica al objeto de datos.The DataTemplate that is returned by the method is then applied to that data object.

<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.For the complete sample, see Introduction to Data Templating Sample.

Comentarios

Normalmente, se crea un DataTemplateSelector cuando tiene más de una DataTemplate para el mismo tipo de objetos y se desea proporcionar su propia lógica para elegir un DataTemplate a aplicar basándose en las propiedades de cada objeto de datos.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. Tenga en cuenta que si tiene objetos de diferentes tipos que se puede establecer el DataType propiedad en el DataTemplate.Note that if you have objects of different types you can set the DataType property on the DataTemplate. Si lo hace, no hay ninguna necesidad de crear un DataTemplateSelector.If you do that then there is no need to create a DataTemplateSelector. Además, si tiene objetos del mismo tipo pero con propiedades diferentes, también puede usar un DataTrigger o un convertidor de datos.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Para obtener más información, consulte Información general sobre plantillas de datos.For more information, see Data Templating Overview.

Para crear un selector de plantillas, cree una clase que hereda de DataTemplateSelector e invalidar la SelectTemplate método.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. Una vez definida la clase puede asignar una instancia de la clase a la propiedad de selector de plantilla del elemento.Once your class is defined you can assign an instance of the class to the template selector property of your element.

Constructores

DataTemplateSelector()

Inicializa una nueva instancia de la clase DataTemplateSelector. Initializes a new instance of the DataTemplateSelector class.

Métodos

Equals(Object)

Determina si el objeto especificado es igual al objeto actual. Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode()

Sirve como la función hash predeterminada. Serves as the default hash function.

(Inherited from Object)
GetType()

Obtiene el Type de la instancia actual. Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone()

Crea una copia superficial del Object actual. Creates a shallow copy of the current Object.

(Inherited from Object)
SelectTemplate(Object, DependencyObject)

Cuando se reemplaza en una clase derivada, devuelve un objeto DataTemplate basándose en la lógica personalizada. When overridden in a derived class, returns a DataTemplate based on custom logic.

ToString()

Devuelve una cadena que representa el objeto actual. Returns a string that represents the current object.

(Inherited from Object)

Se aplica a