DataTemplateSelector Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 myTaskTemplate
importantTaskTemplate
.
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) |