DataTemplateSelector.SelectTemplate(Object, DependencyObject) Método
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.
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
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.