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 objekt 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 dvě šablony dat, myTaskTemplate
a importantTaskTemplate
.
Chcete-li zadat logiku pro výběr, který DataTemplate se má použít na Priority
základě hodnoty datového objektu, vytvořte podtřídu DataTemplateSelector a přepište metodu SelectTemplate . 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 šablon, přiřaďte ho ItemTemplateSelectorListBoxk vlastnosti . Volá ListBox metodu SelectTemplateTaskListDataTemplateSelector
pro každou položku 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
Obvykle se vytváří DataTemplateSelector , když máte více než jeden DataTemplate pro stejný typ objektů a chcete zadat vlastní logiku pro volbu DataTemplate , která se použije 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 nastavit DataType vlastnost v objektu DataTemplate. Pokud to uděláte, není potřeba vytvářet DataTemplateSelector. Pokud máte objekty stejného typu, ale s různými vlastnostmi, můžete také zvážit použití DataTrigger převaděče dat nebo . Další informace najdete v tématu Přehled šablon dat.
Pokud chcete vytvořit selektor šablony, vytvořte třídu, která dědí z DataTemplateSelector a přepíše metodu SelectTemplate . Jakmile je vaše třída definována, můžete přiřadit instanci třídy k selektoru šablony vlastnost prvku.
Konstruktory
DataTemplateSelector() |
Inicializuje novou instanci DataTemplateSelector třídy . |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
SelectTemplate(Object, DependencyObject) |
Při přepsání v odvozené třídě vrátí hodnotu na DataTemplate základě vlastní logiky. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |