DataTemplateSelector Třída
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í.
Poskytuje způsob, jak zvolit DataTemplate na základě datového objektu a prvku vázaného na data.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Dědičnost
-
DataTemplateSelector
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
Obvykle vytvoříte DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku, která DataTemplate se má použít na základě vlastností každého datového objektu. Všimněte si, že pokud máte objekty různých typů, můžete vlastnost nastavit DataType na DataTemplate. Pokud to uděláte, není nutné vytvořit DataTemplateSelector. Kromě toho, pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger nebo převaděč dat. Další informace najdete v tématu Přehled šablon dat.
Chcete-li vytvořit selektor šablony, vytvořte třídu, která dědí z DataTemplateSelector metody a přepíše metodu SelectTemplate . Jakmile je třída definována, můžete přiřadit instanci třídy k vlastnosti selektoru šablony prvku.
Konstruktory
| Name | Description |
|---|---|
| DataTemplateSelector() |
Inicializuje novou instanci DataTemplateSelector třídy. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| SelectTemplate(Object, DependencyObject) |
Při přepsání v odvozené třídě vrátí na DataTemplate základě vlastní logiky. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |