DataTemplateSelector.SelectTemplate(Object, DependencyObject) Método

Definição

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

public:
 virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate (object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate

Parâmetros

item
Object

O objeto de dados para o qual você seleciona o modelo.

container
DependencyObject

O objeto associado aos dados.

Retornos

DataTemplate

Retorna uma DataTemplate ou um null. O valor padrão é null.

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ê usa um seletor de modelo quando tem mais de um modelo de dados definido para o mesmo tipo de objetos. Por exemplo, se sua origem de associação estiver listando uma lista de objetos de aluno e você quiser aplicar um modelo específico aos alunos de meio período. Você pode fazer isso criando uma classe que herda DataTemplateSelector e substitui 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.

Aplica-se a