DataTemplateSelector Classe

Definição

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)

Aplica-se a