DataTemplateSelector.SelectTemplate(Object, DependencyObject) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Quando sobrescrito numa classe derivada, retorna a DataTemplate baseado 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 selecionar o modelo.
- container
- DependencyObject
O objeto ligado a dados.
Devoluções
Devolve um DataTemplate ou null. O valor predefinido é null.
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, utiliza-se um seletor de modelos quando se tem mais do que um modelo de dados definido para o mesmo tipo de objetos. Por exemplo, se a tua fonte de ligação for listar uma lista de objetos de aluno e quiseres aplicar um modelo específico aos alunos a tempo parcial. Podes fazer isto criando uma classe que herda e DataTemplateSelector sobrepondo 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.