Freigeben über


Übersicht über die WPF-Datenbindung mit LINQ to XML

In diesem Artikel werden die dynamischen Datenbindungsfeatures im System.Xml.Linq-Namespace vorgestellt. Diese Features können als Datenquelle für Benutzeroberflächenelemente in Windows Presentation Foundation (WPF)-Apps verwendet werden. Dieses Szenario basiert auf speziellen dynamischen Eigenschaften von System.Xml.Linq.XAttribute und System.Xml.Linq.XElement.

XAML und LINQ to XML

Die Extensible Application Markup Language (XAML) ist ein von Microsoft erstellter XML-Dialekt zur Unterstützung von .NET-Technologien. Es wird in WPF verwendet, um Benutzeroberflächenelemente und zugehörige Features wie Ereignisse und Datenbindung darzustellen. In Windows Workflow Foundation wird XAML verwendet, um die Programmstruktur darzustellen, z. B. Programmsteuerung (Workflows). XAML ermöglicht es, die deklarativen Aspekte einer Technologie vom zugehörigen prozeduralen Code zu trennen, der das individualisierte Verhalten eines Programms definiert.

Es gibt zwei allgemeine Möglichkeiten, wie XAML und LINQ to XML interagieren können:

  • Da XAML-Dateien wohlgeformte XML-Dateien sind, können sie über XML-Technologien wie LINQ to XML abgefragt und bearbeitet werden.

  • Da LINQ to XML-Abfragen eine Datenquelle darstellen, können diese Abfragen als Datenquelle für die Datenbindung für WPF-UI-Elemente verwendet werden.

In dieser Dokumentation wird das zweite Szenario beschrieben.

Datenbindung in Windows Presentation Foundation

Mit der WPF-Datenbindung kann ein UI-Element eine seiner Eigenschaften einer Datenquelle zuordnen. Ein einfaches Beispiel hierfür ist eine Label, deren Text den Wert einer öffentlichen Eigenschaft in einem benutzerdefinierten Objekt anzeigt. Die WPF-Datenbindung basiert auf den folgenden Komponenten:

Bestandteil Beschreibung
Bindungsziel Das UI-Element, das der Datenquelle zugeordnet werden soll. Visuelle Elemente in WPF werden von der UIElement Klasse abgeleitet.
Target-Eigenschaft Die Abhängigkeitseigenschaft des Bindungsziels, die den Wert der Datenbindungsquelle widerspiegelt. Abhängigkeitseigenschaften werden direkt von der DependencyObject-Klasse unterstützt, von der UIElement abgeleitet wird.
Bindungsquelle Das Quellobjekt für einen oder mehrere Werte, die dem Element der Benutzeroberfläche zur Darstellung bereitgestellt werden. WPF unterstützt automatisch die folgenden Typen als Bindungsquellen: CLR-Objekte, ADO.NET Datenobjekte, XML-Daten (von XPath oder LINQ zu XML-Abfragen) oder ein anderes DependencyObject.
Quellpfad Die Eigenschaft der Bindungsquelle, die in den Wert oder die Gruppe von Werten aufgelöst wird, die gebunden werden sollen.

Eine Abhängigkeitseigenschaft ist ein konzeptspezifisch für WPF, das eine dynamisch berechnete Eigenschaft eines UI-Elements darstellt. Abhängigkeitseigenschaften weisen z. B. häufig Standardwerte oder Werte auf, die von einem übergeordneten Element bereitgestellt werden. Diese speziellen Eigenschaften werden durch Instanzen der DependencyProperty-Klasse unterstützt und nicht durch Felder wie bei standardmäßigen Eigenschaften. Weitere Informationen finden Sie unter Übersicht über Abhängigkeitseigenschaften.

Dynamische Datenbindung in WPF

Standardmäßig tritt die Datenbindung nur auf, wenn das Ziel-UI-Element initialisiert wird. Dies wird als die einmalige Bindung bezeichnet. Für die meisten Zwecke reicht dies nicht aus; In der Regel erfordert eine Datenbindungslösung, dass die Änderungen zur Laufzeit dynamisch verteilt werden, indem eine der folgenden Optionen verwendet wird:

  • Einseitige Bindung bewirkt, dass die Änderungen automatisch auf einer Seite propagiert werden. Am häufigsten werden Änderungen an der Quelle im Ziel widergespiegelt, aber auch das Umgekehrte kann manchmal nützlich sein.

  • In der bidirektionalen Bindung werden Änderungen an der Quelle automatisch an das Ziel weitergegeben, und Änderungen am Ziel werden automatisch an die Quelle weitergegeben.

Damit eine unidirektionale oder bidirektionale Bindung erfolgen kann, muss die Quelle einen Änderungsbenachrichtigungsmechanismus implementieren, z. B. durch die Implementierung der INotifyPropertyChanged-Schnittstelle oder durch die Verwendung eines -PropertyNameChanged--Musters für jede unterstützte Eigenschaft.

Weitere Informationen zur Datenbindung in WPF finden Sie unter Datenbindung (WPF).

Dynamische Eigenschaften in LINQ to XML-Klassen

Die meisten LINQ to XML-Klassen gelten nicht als richtige dynamische WPF-Datenquellen. Einige der nützlichsten Informationen sind nur über Methoden und nicht über Eigenschaften verfügbar, und die Eigenschaften dieser Klassen implementieren keine Änderungsbenachrichtigungen. Um die WPF-Datenbindung zu unterstützen, macht LINQ to XML eine Reihe von dynamischen Eigenschaftenverfügbar.

Diese dynamischen Eigenschaften sind spezielle Laufzeiteigenschaften, die die Funktionalität vorhandener Methoden und Eigenschaften in den klassen XAttribute und XElement duplizieren. Sie wurden diesen Klassen nur hinzugefügt, damit sie als dynamische Datenquellen für WPF fungieren können. Um diesen Bedarf zu erfüllen, implementieren alle diese dynamischen Eigenschaften Änderungsbenachrichtigungen. Eine ausführliche Referenz zu diesen dynamischen Eigenschaften finden Sie im nächsten Abschnitt, LINQ to XML Dynamic Properties.

Anmerkung

Viele der standardmäßigen öffentlichen Eigenschaften, die in den verschiedenen Klassen im System.Xml.Linq-Namespace zu finden sind, können für einmalige Datenbindung verwendet werden. Denken Sie jedoch daran, dass weder die Quelle noch das Ziel dynamisch unter diesem Schema aktualisiert werden.

Zugreifen auf dynamische Eigenschaften

Auf die dynamischen Eigenschaften in den klassen XAttribute und XElement können nicht wie Standardeigenschaften zugegriffen werden. Beispielsweise können sie in CLR-kompatiblen Sprachen wie C# nicht verwendet werden.

  • Direkter Zugriff zur Kompilierungszeit. Dynamische Eigenschaften sind für den Compiler und für Visual Studio IntelliSense nicht sichtbar.

  • Zur Laufzeit mithilfe von .NET-Reflexion ermittelt oder darauf zugegriffen. Auch zur Laufzeit sind sie im grundlegenden CLR-Sinne keine Eigenschaften.

In C# können dynamische Eigenschaften nur zur Laufzeit über vom System.ComponentModel-Namespace bereitgestellte Einrichtungen aufgerufen werden.

Im Gegensatz dazu kann jedoch in einer XML-Quelle durch eine einfache Schreibweise auf dynamische Eigenschaften in der folgenden Form zugegriffen werden.

<object>.<dynamic-property>

Die dynamischen Eigenschaften für diese beiden Klassen werden entweder auf einen Wert aufgelöst, der direkt genutzt werden kann, oder auf einen Indexer, der mit einem Index versehen werden muss, um den resultierenden Wert oder eine Sammlung von Werten abzurufen. Die zweite Syntax hat die Folgende Form:

<object>.<dynamic-property>[<index-value>]

Weitere Informationen finden Sie unter LINQ to XML Dynamic Properties.

Um die dynamische WPF-Bindung zu implementieren, werden dynamische Eigenschaften genutzt, die insbesondere von der im System.Windows.Data-Namespace bereitgestellten Binding-Klasse unterstützt werden.

Siehe auch