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í na DataTemplate 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 vybrat šablonu.
- container
- DependencyObject
Objekt svázaný s daty.
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 myTaskTemplate dvě šablony dat a importantTaskTemplate.
Implementujte logiku pro výběr, kterou DataTemplate použít k použití na základě Priority hodnoty datového objektu, vytvořte podtřídu DataTemplateSelector a přepište metodu SelectTemplate. V následujícím příkladu metoda SelectTemplate poskytuje logiku pro vrácení příslušné šablony na základě hodnoty vlastnosti Priority. Šablona, která se má vrátit, se nachází v prostředcích obálkového prvku 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>
Chcete-li použít prostředek selektoru šablony, přiřaďte ho k vlastnosti ItemTemplateSelector u ListBox.
ListBox volá metodu SelectTemplate z TaskListDataTemplateSelector pro každou položku v rámci podkladové kolekce. Volání předá datový objekt jako parametr položky.
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 více než jednu datovou šablonu definovanou pro stejný typ objektů. Pokud je zdrojem vazby například seznam objektů studentů a chcete pro studenty na částečný úvazek použít konkrétní šablonu. Můžete to provést vytvořením třídy, která dědí z DataTemplateSelector a přepsání SelectTemplate metody. Jakmile je třída definována, můžete přiřadit instanci třídy k vlastnosti selektoru šablony prvku.