DataTemplate Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Beschreibt die visuelle Struktur eines Datenobjekts. Verwenden Sie die Datenbindung für bestimmte Elemente in der Vorlage, die die Datenwerte anzeigen.
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate, IElementFactory
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate, IElementFactory
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
- Vererbung
- Attribute
- Implementiert
Beispiele
Im folgenden Beispiel wird eine DataTemplate verwendet, um die Elemente eines ListView-Steuerelements anzuzeigen. In diesem Beispiel ist listView an eine Auflistung von Customer Objekten gebunden. DataTemplate enthält TextBlock-Steuerelemente, die an die FirstNameEigenschaften und LastNameAddress Eigenschaften gebunden sind. Weitere Informationen zur Datenbindung finden Sie im Detail unter "Datenbindung".
<Grid>
<Grid.Resources>
<local:Customers x:Key="customers"/>
</Grid.Resources>
<ListView ItemsSource="{StaticResource customers}"
Width="350" Margin="0,4,0,8">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Customer">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind LastName}"/>
<TextBlock Text="," Margin="0,0,2,0"/>
<TextBlock Text="{x:Bind FirstName}"/>
</StackPanel>
<TextBlock Text="{x:Bind Address}" Margin="8,0,0,2"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
public class Customer
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String Address { get; set; }
public Customer(String firstName, String lastName, String address)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
}
public class Customers : ObservableCollection<Customer>
{
public Customers()
{
Add(new Customer("Michael", "Anderberg",
"12 North Third Street, Apartment 45"));
Add(new Customer("Chris", "Ashton",
"34 West Fifth Street, Apartment 67"));
Add(new Customer("Seo-yun", "Jun",
"56 East Seventh Street, Apartment 89"));
Add(new Customer("Guido", "Pica",
"78 South Ninth Street, Apartment 10"));
}
}
Hinweise
Ein DataTemplate Objekt wird als Wert für diese Eigenschaften verwendet:
- ItemsControl.ItemTemplate (die von verschiedenen Elementsteuerelementen wie ListView, GridView, ListBox geerbt wird)
- ContentControl.ContentTemplate (das von verschiedenen Inhaltssteuerelementen wie Button, Frame, SettingsFlyout geerbt wird)
-
HeaderTemplateundFooterTemplateEigenschaften verschiedener Elementsteuerelementklassen - ItemsPresenter.HeaderTemplate und ItemsPresenter.FooterTemplate
-
HeaderTemplateundFooterTemplateEigenschaften von Textsteuerelementen wie RichEditBox, TextBox -
HeaderTemplateEigenschaft von Steuerelementen wie ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; einige davon haben auchFooterTemplate
In der Regel verwenden Sie eine DataTemplate, um die visuelle Darstellung Ihrer Daten anzugeben. DataTemplate-Objekte sind besonders hilfreich, wenn Sie ein ItemsControl-Objekt wie ein ListBox-Objekt an eine gesamte Auflistung binden. Ohne bestimmte Anweisungen zeigt ein ListBox die Zeichenfolgendarstellung der Objekte in einer Auflistung an. Verwenden Sie eine DataTemplate, um die Darstellung der einzelnen Datenobjekte zu definieren. Der Inhalt Ihrer DataTemplate wird zur visuellen Struktur Ihrer Datenobjekte.
In der Regel verwenden Sie die Datenbindung in einer DataTemplate. Angenommen, eine ListView ist an eine Auflistung von Customer Objekten gebunden und hat die ItemTemplate-Eigenschaft auf eine DataTemplate festgelegt. Wenn das ListView-Objekt erstellt wird, wird ein ListViewItem-Objekt für jede Customer in der Sammlung erstellt, und der DataContext des ListViewItem-Objekts wird auf den entsprechenden Kunden festgelegt. Anders ausgedrückt: Der DataContext des ersten ListViewItem-Objekts wird auf den ersten Kunden festgelegt, der DataContext des zweiten ListViewItem-Objekts wird auf den zweiten Kunden festgelegt usw. Sie können Elemente in der DataTemplate binden, um Eigenschaftswerte anzuzeigen, die aus den einzelnen Customer Objekten stammen.
Sie können auch eine DataTemplate verwenden, um UIElement-Objekte über mehrere ContentControl-Objekte hinweg zu teilen. Angenommen, Sie benötigen mehrere Schaltflächen in Ihrer Anwendung, um dieselbe Grafik zu haben. Sie können eine DataTemplate erstellen, die die Grafik enthält, und sie als ContentTemplate für die Schaltflächen verwenden. Eine Datenvorlage für ContentTemplate kann auch datenbindung verwenden. In diesem Fall entspricht der Datenkontext jedoch dem Element, auf das die Vorlage angewendet wird. In der Regel handelt es sich um ein Datenobjekt, und es gibt kein Konzept von Elementen.
Sie können eine DataTemplate als direktes untergeordnetes Element eines ItemTemplate-Eigenschaftselements in XAML platzieren. Dies ist als Inlinevorlage bekannt, und Sie würden dies tun, wenn Sie nicht dieselbe Datenvorlage für andere Bereiche der Benutzeroberfläche verwenden müssen. Sie können eine DataTemplate auch als Ressource definieren und dann als Wert der ItemTemplate-Eigenschaft auf die Ressource verweisen. Sobald es sich um eine Ressource handeln soll, können Sie dieselbe Vorlage für mehrere UI-Elemente verwenden, die eine Datenvorlage benötigen. Wenn Sie die Datenvorlage in Application.Resources einteilen, können Sie sogar dieselbe Vorlage für verschiedene Seiten der Benutzeroberfläche freigeben.
Die XAML-Verwendung für Inhalte einer Datenvorlage wird nicht als settable-Codeeigenschaft verfügbar gemacht. Es ist ein spezielles Verhalten, das in die XAML-Verarbeitung für eine DataTemplate integriert ist.
Für erweiterte Datenbindungsszenarien sollten Sie über Eigenschaften der Daten verfügen, die bestimmen, welche Vorlage ihre UI-Darstellungen erzeugen soll. In diesem Szenario können Sie einen DataTemplateSelector verwenden und Eigenschaften wie ItemTemplateSelector festlegen, um sie einer Datenansicht zuzuweisen. Ein DataTemplateSelector ist eine Logikklasse, die Sie selbst schreiben, die eine Methode enthält, die genau eine DataTemplate auf der Grundlage Ihrer eigenen Logik, die mit Ihren Daten interagiert, an das Bindungsmodul zurückgibt. Weitere Informationen finden Sie unter Datenbindung im Detail.
Angefügte XAML-Eigenschaften
DataTemplate ist die Hostdienstklasse für eine angefügte XAML-Eigenschaft.
Um den XAML-Prozessorzugriff auf die angefügten Eigenschaften zu unterstützen und auch entsprechende Get - und Set-Vorgänge für Code verfügbar zu machen, verfügt jede angefügte XAML-Eigenschaft über ein Paar Get- und Set-Accessormethoden. Eine weitere Möglichkeit zum Abrufen oder Festlegen des Werts im Code besteht darin, das Abhängigkeitseigenschaftssystem zu verwenden, indem entweder GetValue oder SetValue aufgerufen und das Bezeichnerfeld als Abhängigkeitseigenschaftsbezeichner übergeben wird.
| Angefügte Eigenschaft | Beschreibung |
|---|---|
| ExtensionInstance | Dient zum Abrufen oder Festlegen einer Erweiterungsinstanz, die Hilfsmethoden für das phasenweise Rendern einer Datenvorlage definiert.
|
Konstruktoren
| Name | Beschreibung |
|---|---|
| DataTemplate() |
Initialisiert eine neue Instanz der DataTemplate-Klasse . |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Dispatcher |
Gibt immer in einer Windows App SDK-App zurück |
| DispatcherQueue |
Ruft ab |
| ExtensionInstanceProperty |
Identifies the ExtensionInstance XAML attached property. |
Angefügte Eigenschaften
| Name | Beschreibung |
|---|---|
| ExtensionInstance |
Dient zum Abrufen oder Festlegen einer Erweiterungsinstanz, die Hilfsmethoden für das phasenweise Rendern einer Datenvorlage definiert. |
Methoden
| Name | Beschreibung |
|---|---|
| ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Abhängigkeitseigenschaft. (Geerbt von DependencyObject) |
| GetAnimationBaseValue(DependencyProperty) |
Gibt einen Basiswert zurück, der für eine Abhängigkeitseigenschaft eingerichtet wurde, was in Fällen angewendet wird, in denen eine Animation nicht aktiv ist. (Geerbt von DependencyObject) |
| GetElement(ElementFactoryGetArgs) |
Erstellt oder ruft eine vorhandene Instanz des UIElement - Objekts, das in der DataTemplate deklariert ist. |
| GetExtensionInstance(FrameworkElement) |
Ruft den Wert der angefügten DataTemplate.ExtensionInstance-XAML-Eigenschaft für das Zielelement ab. |
| GetValue(DependencyProperty) |
Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft aus einem DependencyObject zurück. (Geerbt von DependencyObject) |
| LoadContent() |
Erstellt die UIElement-Objekte in der DataTemplate. |
| ReadLocalValue(DependencyProperty) |
Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn ein lokaler Wert festgelegt wird. (Geerbt von DependencyObject) |
| RecycleElement(ElementFactoryRecycleArgs) |
Recycelt ein UIElement , das zuvor mithilfe von GetElement abgerufen wurde. |
| RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registriert eine Benachrichtigungsfunktion, um Änderungen an einer bestimmten DependencyProperty für diese DependencyObject-Instanz zu überwachen. (Geerbt von DependencyObject) |
| SetExtensionInstance(FrameworkElement, IDataTemplateExtension) |
Legt den Wert der angefügten Xaml-Eigenschaft "DataTemplate.ExtensionInstance " für ein Zielelement fest. |
| SetValue(DependencyProperty, Object) |
Legt den lokalen Wert einer Abhängigkeitseigenschaft für ein DependencyObject fest. (Geerbt von DependencyObject) |
| UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Bricht eine Änderungsbenachrichtigung ab, die zuvor durch Aufrufen von RegisterPropertyChangedCallback registriert wurde. (Geerbt von DependencyObject) |