DataTemplateSelector Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece uma maneira de escolher um DataTemplate baseado no objeto de dados e no elemento associado a dados.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Herança
-
DataTemplateSelector
Exemplos
Neste exemplo, a origem da associação é uma lista de Task objetos. Uma das propriedades de um Task objeto é Priority. Há 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 método SelectTemplate fornece lógica para retornar o modelo apropriado com base no valor da propriedade Priority. O modelo a ser retornado é encontrado nos recursos do elemento Window envolvente.
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
Em seguida, podemos declarar o TaskListDataTemplateSelector como um recurso:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Para usar o recurso de seletor de modelo, atribua-o à propriedade ItemTemplateSelector do ListBox. O ListBox chama o método SelectTemplate do TaskListDataTemplateSelector para cada um dos itens na coleção subjacente. A chamada passa o objeto de dados como o parâmetro de item. O DataTemplate retornado pelo método é 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.
Comentários
Normalmente, você cria um DataTemplateSelector quando tem mais de um DataTemplate para o mesmo tipo de objetos e deseja fornecer sua própria lógica para escolher uma DataTemplate aplicação com base nas propriedades de cada objeto de dados. Observe que, se você tiver objetos de diferentes tipos, poderá definir a DataType propriedade no DataTemplate. Se você fizer isso, não será necessário criar um DataTemplateSelector. Além disso, se você tiver objetos do mesmo tipo, mas com propriedades diferentes, também poderá considerar o uso de um DataTrigger conversor de dados ou um conversor de dados. Para obter mais informações, consulte Visão geral da Modelagem de Dados.
Para criar um seletor de modelo, crie uma classe que herda DataTemplateSelector e substitua o SelectTemplate método. Depois que sua classe for definida, você poderá atribuir uma instância da classe à propriedade seletora de modelo do elemento.
Construtores
| Nome | Description |
|---|---|
| DataTemplateSelector() |
Inicializa uma nova instância da classe DataTemplateSelector. |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| SelectTemplate(Object, DependencyObject) |
Quando substituído em uma classe derivada, retorna um DataTemplate baseado na lógica personalizada. |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |