Übersicht über Bindungsquellen

Aktualisiert: November 2007

Bei der Datenbindung verweist das Bindungsquellenobjekt (Quelle) auf das Objekt, aus dem Sie Ihre Daten abrufen. In diesem Thema werden die Objekttypen, die als Quelle verwendet werden können, vorgestellt.

Dieses Thema enthält folgende Abschnitte.

  • Die Quelle einer Bindung
  • Verwenden einer CLR-Klasse als Bindungsquellenobjekt
  • Als Bindungsquelle verwendete ganze Objekte
  • Als Bindungsquelle verwendete Auflistungsobjekte
  • Erforderliche Berechtigungen
  • Verwandte Abschnitte

Die Quelle einer Bindung

Bei der Datenbindung in Windows Presentation Foundation (WPF) werden die folgenden Arten von Bindungsquelle unterstützt:

Bindungsquelle

Beschreibung

common language runtime (CLR)-Objekte

Sie können eine Bindung an die öffentlichen Eigenschaften, Untereigenschaften und Indexer aller common language runtime (CLR)-Objekte herstellen. Das Bindungsmodul verwendet die CLR-Reflektion, um die Werte der Eigenschaften abzurufen. Darüber hinaus kann das Bindungsmodul auch bei Objekten, die ICustomTypeDescriptor implementieren oder über einen registrierten TypeDescriptionProvider verfügen, verwendet werden.

Im nächsten Abschnitt wird erläutert, wie Sie eine Klasse implementieren, die als Quellobjekt verwendet werden kann.

ADO.NET-Daten

Sie können eine Bindung an ADO.NET-Objekte wie DataTable herstellen. ADO.NETDataView implementiert IBindingList und stellt so vom Bindungsmodul überwachte Änderungsbenachrichtigungen bereit.

Ein Beispiel finden Sie unter Beispiel zum Binden an ein ADO.NET-DataSet.

XML-Daten

Sie können eine Bindung an XmlNode, XmlDocument oder XmlElement herstellen und für diese Objekte auch XPath-Abfragen ausführen. Auf XML-Daten, bei denen es sich um die Bindungsquelle im Markup handelt, kann auf einfache Weise mit einem XmlDataProvider-Objekt zugegriffen werden. Weitere Informationen finden Sie unter Gewusst wie: Binden an XML-Daten mithilfe von XMLDataProvider und XPath-Abfragen.

Sie können auch eine Bindung an XElement oder XDocument oder an LINQ für XML-Abfrageergebnisse herstellen. Auf XML-Daten, bei denen es sich um die Bindungsquelle im Markup handelt, kann auf einfache Weise mit einem ObjectDataProvider-Objekt zugegriffen werden. Weitere Informationen hierzu finden Sie unter Gewusst wie: Binden an XDocument, XElement oder LINQ für XML-Abfrageergebnisse.

DependencyObject

Sie können mit den Abhängigkeitseigenschaften von DependencyObject eine Bindung herstellen. Ein Beispiel finden Sie unter Gewusst wie: Binden der Eigenschaften von zwei Steuerelementen.

Verwenden einer CLR-Klasse als Bindungsquellenobjekt

In diesem Abschnitt erfahren Sie, wie Sie eine CLR-Klasse als Quellobjekt implementieren können.

Bereitstellen von Änderungsbenachrichtigungen

Wenn Sie die OneWay-Bindung oder die TwoWay-Bindung verwenden (wobei die Benutzeroberfläche bei einer Änderung der Quelleigenschaften dynamisch aktualisiert werden sollte), müssen Sie einen geeigneten Mechanismus für die Änderungsbenachrichtigung implementieren. Empfohlen wird hierbei, dass die CLR-Klasse die INotifyPropertyChanged-Schnittstelle implementiert. Weitere Informationen finden Sie unter Gewusst wie: Implementieren von Benachrichtigungen bei Eigenschaftenänderungen.

Falls Sie INotifyPropertyChanged nicht implementieren möchten, müssen Sie Ihr eigenes Benachrichtigungssystem einrichten, um sicherzustellen, dass die in einer Bindung verwendeten Daten immer aktuell sind. Sie können Änderungsbenachrichtigungen bereitstellen, indem Sie das PropertyChanged-Muster für jede Eigenschaft, für die Änderungsbenachrichtigungen ausgegeben werden sollen, unterstützen. Um dieses Muster zu unterstützen, definieren Sie für jede Eigenschaft ein Name_der_EigenschaftChanged-Ereignis, wobei Name_der_Eigenschaft der Name der jeweiligen Eigenschaft ist. Dieses Ereignis wird bei jeder Änderung der Eigenschaft ausgelöst.

Wenn das Quellobjekt einen ordnungsgemäßen Benachrichtigungsmechanismus implementiert, erfolgt die Aktualisierung des Ziels automatisch. Falls das Quellobjekt aus irgendeinem Grund keine ordnungsgemäße Benachrichtigung für Eigenschaftsänderungen bereitstellt, kann die Zieleigenschaft explizit mit der UpdateTarget-Methode aktualisiert werden.

Weitere Merkmale

In der folgenden Liste finden Sie weitere zu beachtende Punkte:

  • Wenn Sie das Objekt mit XAML erstellen möchten, muss die Klasse über einen Standardkonstruktor verfügen. In einigen .NET-Sprachen wie C# wird der Standardkonstruktor eventuell automatisch erstellt.

  • Die als Quelleigenschaften für eine Bindung verwendeten Eigenschaften müssen öffentliche Eigenschaften der Klasse sein. Explizit definierte Schnittstelleneigenschaften sowie geschützte, private und virtuelle Eigenschaften können nicht für eine Bindung herangezogen werden.

  • Die Bindung an öffentliche Felder einer CLR-Klasse ist nicht möglich.

  • Der in der Klasse deklarierte Eigenschaftentyp ist der an die Bindung übergebene Typ. Allerdings wird der letztendlich in der Bindung verwendete Typ durch die Eigenschaft des Bindungsziels und nicht durch die Quelleigenschaft bestimmt. Falls sich die Typen unterscheiden, können Sie ggf. einen Konverter erstellen, der vorgibt, wie die benutzerdefinierte Eigenschaft anfänglich an die Bindung übergeben wird. Weitere Informationen finden Sie unter IValueConverter.

Als Bindungsquelle verwendete ganze Objekte

Sie können das gesamte Objekt als Quelle für eine Bindung verwenden. Geben Sie hierfür das Objekt mit der Source-Eigenschaft oder der DataContext-Eigenschaft als Bindungsquelle an, und fügen Sie dann keinen Pfad an die leere Bindungsdeklaration an: {Binding}. Diese Vorgehensweise eignet sich zum Beispiel für Szenarien, bei denen die Bindung an string-Objekte, an Objekte mit mehreren relevanten Eigenschaften oder an Auflistungsobjekte erfolgt. Ein Beispiel für die Bindung an ein gesamtes Auflistungsobjekt finden Sie unter Gewusst wie: Verwenden des Master/Detail-Musters mit hierarchischen Daten.

Beachten Sie, dass Sie ggf. benutzerdefinierte Logik anwenden müssen, damit die Daten für die gebundene Zieleigenschaft sinnvoll sind. Bei der benutzerdefinierten Logik kann es sich zum Beispiel um einen benutzerspezifischen Konverter (falls keine Standardkonvertierung vorhanden ist) oder um DataTemplate handeln. Weitere Informationen zu Konvertern finden Sie im Abschnitt zur Datenkonvertierung unter Übersicht über Datenbindung. Weitere Informationen zu Datenvorlagen finden Sie unter Übersicht über Datenvorlagen.

Als Bindungsquelle verwendete Auflistungsobjekte

Häufig handelt es sich bei dem Objekt, das Sie verwenden möchten, um eine Auflistung mehrerer benutzerdefinierter Objekte, von denen jedes ein Datenobjekt, das als Quelle für eine Instanz einer wiederholten Bindung fungiert, repräsentiert. So verfügen Sie vielleicht über eine CustomerOrders-Auflistung mit CustomerOrder-Objekten, die wiederholt von Ihrer Anwendung durchlaufen wird, um festzustellen, wie viele Bestellungen mit welchen Daten vorhanden sind.

Sie können jede Auflistung auflisten, die die IEnumerable-Schnittstelle implementiert. Um dynamische Bindungen einzurichten, bei denen die Benutzeroberfläche automatisch nach Einfügungen oder Löschungen in der Auflistung aktualisiert wird, muss die Auflistung die INotifyCollectionChanged-Schnittstelle implementieren. Diese Schnittstelle macht ein Ereignis verfügbar, das bei jeder Änderung der zugrunde liegenden Auflistung ausgelöst werden muss.

WPF stellt die ObservableCollection<T>-Klasse bereit, bei der es sich um die integrierte Implementierung einer Datenauflistung handelt, die die INotifyCollectionChanged-Schnittstelle verfügbar macht. Die einzelnen Datenobjekte in der Auflistung müssen die zuvor beschriebenen Anforderungen erfüllen. Ein Beispiel finden Sie unter Gewusst wie: Erstellen und Binden an ObservableCollection. Statt eigene Auflistungen zu implementieren, können Sie auch ObservableCollection<T> bzw. eine vorhandene Auflistungsklasse wie List<T>, Collection<T> oder BindingList<T> verwenden.

WPF wird nie direkt an eine Auflistung gebunden. Wenn Sie eine Auflistung als Datenquelle angeben, wird WPF an die Standardansicht der Auflistung gebunden. Weitere Informationen über Standardansichten finden Sie unter Übersicht über Datenbindung.

Falls Sie für ein erweitertes Szenario Ihre eigene Auflistung implementieren möchten, können Sie IList und somit eine nicht generische Auflistung von Objekten verwenden, auf die einzeln über den Index zugegriffen werden kann. So lässt sich eine optimale Leistung erzielen.

Erforderliche Berechtigungen

Die folgende Tabelle enthält eine Übersicht über die Eigenschaftstypen, mit denen in einer Anwendung, die mit voller oder teilweiser Vertrauenswürdigkeit ausgeführt wird, eine Bindung hergestellt werden kann:

Eigenschaftentyp

(alle Zugriffsmodifizierer)

CLR-Eigenschaft

CLR-Eigenschaft

Abhängigkeitseigenschaft

Abhängigkeits-

eigenschaft

Vertrauensebene

Volle Vertrauenswürdigkeit

Teilweise Vertrauenswürdigkeit

Volle Vertrauenswürdigkeit

Teilweise Vertrauenswürdigkeit

Öffentliche Klasse

Ja

Ja

Ja

Ja

Private Klasse

Ja

Nein

Ja

Ja

In dieser Tabelle werden die folgenden wichtigen Punkte bezüglich der bei der Datenbindung erforderlichen Berechtigungen beschrieben:

  • Bei CLR-Eigenschaften funktioniert die Datenbindung, solange das Bindungsmodul mittels Reflektion auf die Quelleigenschaft zugreifen kann. Andernfalls wird vom Bindungsmodul eine Warnung ausgegeben, dass die Eigenschaft nicht gefunden wurde. In diesem Fall wird der Fallbackwert bzw. der Standardwert (sofern verfügbar) verwendet.

  • Eine Bindung an Abhängigkeitseigenschaften ist immer möglich.

Die erforderlichen Berechtigungen bei XML-Bindungen sind ähnlich: In einer teilweise vertrauenswürdigen Sandbox kann XmlDataProvider nur ausgeführt werden, wenn die Berechtigung zum Zugriff auf die jeweiligen Daten besteht.

Weitere Informationen zur Sicherheit bei teilweiser Vertrauenswürdigkeit finden Sie unter Windows Presentation Foundation - Sicherheit bei teilweiser Vertrauenswürdigkeit.

Siehe auch

Aufgaben

Gewusst wie: Angeben der Bindungsquelle

Konzepte

Übersicht über Datenbindung

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

Optimieren der Leistung: Datenbindung

Referenz

ObjectDataProvider

XmlDataProvider

Weitere Ressourcen

Gewusst-wie-Themen zur Datenbindung