DataTemplateSelector Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece uma forma de escolher um DataTemplate com base no objeto de dados e no elemento ligado aos dados.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Herança
-
DataTemplateSelector
Exemplos
Neste exemplo, a fonte de ligação é uma lista de Task objetos. Uma das propriedades de um Task objeto é Priority. Existem dois modelos de dados definidos, myTaskTemplate e importantTaskTemplate.
Para fornecer lógica para escolher qual DataTemplate usar com base no valor Priority do objeto de dados, crie uma subclasse de DataTemplateSelector e substitua o método SelectTemplate. No exemplo a seguir, o SelectTemplate método fornece lógica para retornar o modelo apropriado com base no valor da Priority propriedade. O modelo a ser retornado é encontrado nos recursos do 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 então declarar o TaskListDataTemplateSelector como um recurso:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Para utilizar o recurso de seletor de modelo, atribua-o à ItemTemplateSelector propriedade do ListBox. O ListBox chama o método SelectTemplate do TaskListDataTemplateSelector para cada item da coleção subjacente. A chamada passa o objeto de dados como parâmetro do item. O DataTemplate que é retornado pelo método é então aplicado a esse objeto de dados.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Para obter o exemplo completo, consulte Introdução ao exemplo de modelagem de dados.
Observações
Normalmente, cria-se um DataTemplateSelector quando tem mais do que um DataTemplate para o mesmo tipo de objetos e quer fornecer a sua própria lógica para escolher a DataTemplate aplicar com base nas propriedades de cada objeto de dados. Note que, se tiver objetos de diferentes tipos, pode definir a DataType propriedade no DataTemplate. Se fizer isso, então não há necessidade de criar um DataTemplateSelector. Além disso, se tiver objetos do mesmo tipo mas com propriedades diferentes, pode também considerar usar um DataTrigger ou um conversor de dados. Para mais informações, consulte Visão Geral da Templação de Dados.
Para criar um seletor de templates, crie uma classe que herde e DataTemplateSelector sobreponha o SelectTemplate método. Depois de definida a sua classe, pode atribuir uma instância da classe à propriedade do seletor de templates do seu elemento.
Construtores
| Name | Description |
|---|---|
| DataTemplateSelector() |
Inicializa uma nova instância da DataTemplateSelector classe. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| SelectTemplate(Object, DependencyObject) |
Quando sobrescrito numa classe derivada, retorna a DataTemplate baseado em lógica personalizada. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |