DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při přepsání v odvozené třídě vrátí hodnotu DataTemplate na základě vlastní logiky.
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
Parametry
- item
- Object
Datový objekt, pro který chcete šablonu vybrat.
- container
- DependencyObject
Objekt vázaný na data.
Návraty
Vrátí hodnotu DataTemplate nebo null
. Výchozí hodnota je null
.
Příklady
V tomto příkladu je zdrojem vazby seznam Task
objektů. Jednou z vlastností objektu Task
je Priority
. Jsou definovány dvě šablony dat a myTaskTemplate
importantTaskTemplate
.
Pokud chcete zadat logiku pro volbu, kterou DataTemplate použít na základě hodnoty datového objektu, vytvořte podtřídu DataTemplateSelector a přepište metoduSelectTemplate.Priority
V následujícím příkladu metoda poskytuje logiku SelectTemplate pro vrácení příslušné šablony na základě hodnoty Priority
vlastnosti. Šablona, která se má vrátit, se nachází v prostředcích elementu obálky 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
Pak můžeme deklarovat TaskListDataTemplateSelector
jako prostředek:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Pokud chcete použít prostředek selektoru šablony, přiřaďte ho ListBoxk ItemTemplateSelector vlastnosti .
SelectTemplate Volání ListBox metody TaskListDataTemplateSelector
pro každou z položek v podkladové kolekci. Volání předá datový objekt jako parametr položky. Objekt DataTemplate vrácený metodou se pak použije na tento datový objekt.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Kompletní ukázku najdete v tématu Úvod do ukázky šablon dat.
Poznámky
Selektor šablony se obvykle používá, pokud máte pro stejný typ objektů definovaných více než jednu šablonu dat. Pokud je zdrojem vazby například seznam objektů studentů a chcete použít konkrétní šablonu pro studenty na částečný úvazek. Můžete to provést vytvořením třídy, která dědí z DataTemplateSelector a přepsání SelectTemplate metody. Jakmile je vaše třída definována, můžete přiřadit instanci třídy k vlastnosti selektoru šablony elementu.