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(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DataTemplate : FrameworkTemplate
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class DataTemplate : FrameworkTemplate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 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
Public Class DataTemplate
Inherits FrameworkTemplate
Implements IElementFactory
<DataTemplate ...>
templateContent
</DataTemplate>
- Vererbung
- Attribute
- Implementiert
Windows-Anforderungen
Gerätefamilie |
Windows 10 (eingeführt in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)
|
Beispiele
Im folgenden Beispiel wird eine DataTemplate verwendet, um die Elemente eines ListBox-Objekts anzuzeigen. In diesem Beispiel ist das ListBox an eine Auflistung von Customer
-Objekten gebunden. DataTemplate enthält TextBlock-Steuerelemente , die an die FirstName
Eigenschaften , LastName
und Address
gebunden sind. Weitere Informationen zur Datenbindung finden Sie unter Datenbindung.
<Grid>
<Grid.Resources>
<src:Customers x:Key="customers"/>
</Grid.Resources>
<ListBox ItemsSource="{StaticResource customers}" Width="350" Margin="0,5,0,10">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Padding="5,0,5,0"
Text="{Binding FirstName}" />
<TextBlock Text="{Binding LastName}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding Address}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</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"));
}
}
Public Class Customer
Private _firstName As String
Private _lastName As String
Private _address As String
Public Property FirstName() As String
Get
Return _firstName
End Get
Set(ByVal value As String)
_firstName = value
End Set
End Property
Public Property LastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
End Set
End Property
Public Property Address() As String
Get
Return _address
End Get
Set(ByVal value As String)
_address = value
End Set
End Property
Public Sub New(ByVal firstName As String, ByVal lastName As String, ByVal address As String)
Me.FirstName = firstName
Me.LastName = lastName
Me.Address = address
End Sub
End Class
Public Class Customers
Inherits ObservableCollection(Of Customer)
Public Sub New()
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"))
End Sub
End Class
Hinweise
Ein DataTemplate-Objekt wird als Wert für diese Eigenschaften verwendet:
- ItemsControl.ItemTemplate (wird von verschiedenen Elementsteuerelementen wie ListView, GridView, ListBox geerbt)
- ContentControl.ContentTemplate (wird von verschiedenen Inhaltssteuerelementen wie Button, Frame, SettingsFlyout geerbt)
- HeaderTemplate- und FooterTemplate-Eigenschaften verschiedener Elementsteuerelementklassen
- ItemsPresenter.HeaderTemplate und ItemsPresenter.FooterTemplate
- HeaderTemplate- und FooterTemplate-Eigenschaften von Textsteuerelementen wie RichEditBox, TextBox
- HeaderTemplate-Eigenschaft von Steuerelementen wie ComboBox, DatePicker, Hub, HubSection, Pivot, Slider, TimePicker, ToggleSwitch; einige davon verfügen auch über FooterTemplate
Sie verwenden in der Regel eine DataTemplate, um die visuelle Darstellung Ihrer Daten anzugeben. DataTemplate-Objekte sind besonders nützlich, wenn Sie ein ItemsControl-Element wie ein ListBox-Objekt an eine gesamte Auflistung binden. Ohne spezifische 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, ein ListBox ist an eine Auflistung von Customer
-Objekten gebunden und die ItemTemplate-Eigenschaft auf eine DataTemplate festgelegt. Wenn das ListBox-Element erstellt wird, wird für jede Customer
in der Auflistung ein ListBoxItem-Element erstellt, und der DataContext des ListBoxItem-Objekts wird auf den entsprechenden Kunden festgelegt. Anders ausgedrückt: Der DataContext des ersten ListBoxItem ist auf den ersten Kunden, der DataContext des zweiten ListBoxItem auf den zweiten Kunden festgelegt usw. Sie können Elemente in der DataTemplate binden, um Eigenschaftswerte anzuzeigen, die Customer
aus den einzelnen 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 Die Datenbindung verwenden. In diesem Fall ist der Datenkontext jedoch mit dem Element identisch, in dem die Vorlage angewendet wird. In der Regel handelt es sich hierbei 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 diese Datenvorlage nicht für andere Bereiche Ihrer Benutzeroberfläche verwenden müssen. Sie können eine DataTemplate auch als Ressource definieren und dann auf die Ressource als Wert der ItemTemplate-Eigenschaft verweisen. Sobald es sich um eine Ressource handelt, 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 dieselbe Vorlage sogar für verschiedene Seiten Ihrer Benutzeroberfläche freigeben.
Die XAML-Verwendung für Inhalte einer Datenvorlage wird nicht als festlegbare Codeeigenschaft verfügbar gemacht. Es handelt sich um ein spezielles Verhalten, das in die XAML-Verarbeitung für eine DataTemplate integriert ist.
Bei erweiterten Datenbindungsszenarien sollten Sie die Eigenschaften der Daten festlegen lassen, welche Vorlage ihre Ui-Darstellungen erstellen 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 über eine Methode verfügt, die basierend auf Ihrer eigenen Logik, die mit Ihren Daten interagiert, genau eine DataTemplate an die Bindungs-Engine zurückgibt. Weitere Informationen finden Sie unter Datenbindung im Detail.
XAML angefügte 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 äquivalente Get - und Set-Vorgänge für Code verfügbar zu machen, verfügt jede angefügte XAML-Eigenschaft über ein Paar von Get- und Set-Accessormethoden. Eine andere Möglichkeit zum Abrufen oder Festlegen des Werts im Code besteht darin, das Abhängigkeitseigenschaftssystem zu verwenden, entweder GetValue oder SetValue aufzurufen und das Bezeichnerfeld als Abhängigkeitseigenschaftsbezeichner zu übergeben.
Angefügte Eigenschaft | BESCHREIBUNG |
---|---|
ExtensionInstance | Ruft eine Erweiterung instance ab, die Hilfsmethoden für das phasenweise Rendering einer Datenvorlage definiert, oder legt diese fest. |
Versionsverlauf
Windows-Version | SDK-Version | Wertschöpfung |
---|---|---|
1809 | 17763 | GetElement |
1809 | 17763 | RecycleElement |
Konstruktoren
DataTemplate() |
Initialisiert eine neue instance der DataTemplate-Klasse. |
Eigenschaften
Dispatcher |
Ruft den CoreDispatcher ab, dem dieses Objekt zugeordnet ist. CoreDispatcher stellt eine Funktion dar, die auf das DependencyObject im UI-Thread zugreifen kann, auch wenn der Code von einem Nicht-UI-Thread initiiert wird. (Geerbt von DependencyObject) |
ExtensionInstanceProperty |
Gibt die angefügte ExtensionInstance-XAML-Eigenschaft an. |
Angefügte Eigenschaften
ExtensionInstance |
Ruft eine Erweiterung instance ab, die Hilfsmethoden für das phasenweise Rendering einer Datenvorlage definiert, oder legt diese fest. |
Methoden
ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Abhängigkeitseigenschaft. (Geerbt von DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Gibt einen beliebigen Basiswert zurück, der für eine Abhängigkeitseigenschaft festgelegt wurde, was in Fällen gilt, in denen eine Animation nicht aktiv ist. (Geerbt von DependencyObject) |
GetElement(ElementFactoryGetArgs) |
Erstellt oder ruft eine vorhandene instance des in dataTemplate deklarierten UIElement-Objekts ab. |
GetExtensionInstance(FrameworkElement) |
Ruft den Wert der angefügten XAML-Eigenschaft DataTemplate.ExtensionInstance 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 dataTemplate. |
ReadLocalValue(DependencyProperty) |
Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn ein lokaler Wert festgelegt ist. (Geerbt von DependencyObject) |
RecycleElement(ElementFactoryRecycleArgs) |
Recycelt ein UIElement , das zuvor mit GetElement abgerufen wurde. |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registriert eine Benachrichtigungsfunktion zum Lauschen auf Änderungen an einer bestimmten DependencyProperty für dieses DependencyObject-instance. (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 registriert wurde, indem RegisterPropertyChangedCallback aufgerufen wurde. (Geerbt von DependencyObject) |