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.Provides a way to choose a DataTemplate based on the data object and the data-bound element.

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.In this example, the binding source is a list of Task objects. Uma das propriedades de um Task objeto é. PriorityOne of the properties of a Task object is Priority. Há dois modelos de myTaskTemplate dados definidos e. importantTaskTemplateThere are two data templates defined, myTaskTemplate and importantTaskTemplate.

Para fornecer a lógica para escolher DataTemplate qual usar com base Priority no valor do objeto de dados, crie uma subclasse de DataTemplateSelector e substitua o SelectTemplate método.To supply logic to choose which DataTemplate to use based on the Priority value of the data object, create a subclass of DataTemplateSelector and override the SelectTemplate method. No exemplo a seguir, o SelectTemplate método fornece a lógica para retornar o modelo apropriado com base no valor Priority da propriedade.In the following example, the SelectTemplate method provides logic to return the appropriate template based on the value of the Priority property. O modelo a ser retornado é encontrado nos recursos do elemento enveloping Window .The template to return is found in the resources of the enveloping Window element.

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:We can then declare the TaskListDataTemplateSelector as a resource:

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

Para usar o recurso de seletor de modelo, atribua ItemTemplateSelector -o à ListBoxPropriedade do.To use the template selector resource, assign it to the ItemTemplateSelector property of the ListBox. O ListBox chama o SelectTemplate método do TaskListDataTemplateSelector para cada um dos itens na coleção subjacente.The ListBox calls the SelectTemplate method of the TaskListDataTemplateSelector for each of the items in the underlying collection. A chamada passa o objeto de dados como o parâmetro de item.The call passes the data object as the item parameter. O DataTemplate que é retornado pelo método é então aplicado a esse objeto de dados.The DataTemplate that is returned by the method is then applied to that data object.

<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.For the complete sample, see Introduction to Data Templating Sample.

Comentários

Normalmente, você cria um DataTemplateSelector quando você tem mais de um DataTemplate para o mesmo tipo de objeto e deseja fornecer sua própria lógica para escolher um DataTemplate para aplicar com base nas propriedades de cada objeto de dados.Typically, you create a DataTemplateSelector when you have more than one DataTemplate for the same type of objects and you want to supply your own logic to choose a DataTemplate to apply based on the properties of each data object. Observe que, se você tiver objetos de tipos diferentes, poderá definir DataType a propriedade DataTemplateno.Note that if you have objects of different types you can set the DataType property on the DataTemplate. Se você fizer isso, não será necessário criar um DataTemplateSelector.If you do that then there is no need to create a DataTemplateSelector. Além disso, se você tiver objetos do mesmo tipo, mas com propriedades diferentes, também poderá considerar o uso DataTrigger de um conversor de dados do ou do.Furthermore, if you have objects of the same type but with different properties, you can also consider using a DataTrigger or a data converter. Para obter mais informações, consulte Visão geral de modelagem de dados.For more information, see Data Templating Overview.

Para criar um seletor de modelo, crie uma classe que DataTemplateSelector herde de SelectTemplate e substitua o método.To create a template selector, create a class that inherits from DataTemplateSelector and override the SelectTemplate method. Depois que sua classe for definida, você poderá atribuir uma instância da classe à propriedade seletor de modelo do elemento.Once your class is defined you can assign an instance of the class to the template selector property of your element.

Construtores

DataTemplateSelector()

Inicializa uma nova instância da classe DataTemplateSelector.Initializes a new instance of the DataTemplateSelector class.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
SelectTemplate(Object, DependencyObject)

Quando substituído em uma classe derivada, retorna um DataTemplate com base em lógica personalizada.When overridden in a derived class, returns a DataTemplate based on custom logic.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

(Herdado de Object)

Aplica-se a