Partilhar via


DataTemplateSelector Classe

Definição

Fornece uma maneira de escolher um DataTemplate com base no objeto de dados e no elemento de associação de 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 Priority valor do objeto de dados, crie uma subclasse DataTemplateSelector e substitua o SelectTemplate método. 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 de codificação 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

Em seguida, podemos declarar o TaskListDataTemplateSelector como um recurso:

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

Para usar o recurso do seletor de modelo, atribua-o ItemTemplateSelector à propriedade do ListBox. Chama ListBox o SelectTemplate método de TaskListDataTemplateSelector cada um dos itens na coleção subjacente. A chamada passa o objeto de dados como o parâmetro de item. O DataTemplate que é 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 ver a amostra completa, consulte Amostra da introdução à 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 a ser aplicada 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 conversor de dados ou um DataTrigger 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 do seletor de modelo do elemento.

Construtores

DataTemplateSelector()

Inicializa uma nova instância da classe DataTemplateSelector.

Métodos

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 Object atual.

(Herdado de Object)
SelectTemplate(Object, DependencyObject)

Quando substituído em uma classe derivada, retorna um DataTemplate com base em lógica personalizada.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a