Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In der Datenbindung bezieht sich das Bindungsquellobjekt auf das Objekt, aus dem Sie Daten abrufen. In diesem Artikel werden die Typen von Objekten erläutert, die Sie als Bindungsquelle verwenden können, z. B. .NET CLR-Objekte, XML und DependencyObject Objekte.
Bindungsquellentypen
Die Datenbindung von Windows Presentation Foundation (WPF) unterstützt die folgenden Bindungsquellentypen:
.NET Common Language Runtime (CLR)-Objekte
Sie können eine Bindung an öffentliche Eigenschaften, Untereigenschaften und Indexer eines beliebigen ClR-Objekts (Common Language Runtime) vornehmen. Die Bindungs-Engine verwendet CLR-Reflexion, um die Werte der Eigenschaften abzurufen. Objekte, die ein registriertes ICustomTypeDescriptor Objekt implementieren TypeDescriptionProvider oder besitzen, funktionieren auch mit dem Bindungsmodul.
Weitere Informationen zum Implementieren einer Klasse, die als Bindungsquelle dienen kann, finden Sie unter Implementieren einer Bindungsquelle für Ihre Objekte weiter unten in diesem Artikel.
Dynamische Objekte
Sie können eine Bindung an verfügbare Eigenschaften und Indexer eines Objekts vornehmen, das die IDynamicMetaObjectProvider Schnittstelle implementiert. Wenn Sie im Code auf den Member zugreifen können, können Sie eine Bindung dazu erstellen. Wenn Sie z. B. mithilfe eines dynamischen Objekts über
SomeObject.APropertyim Code auf einen Member zugreifen können, können Sie eine Bindung damit erstellen, indem Sie den Bindungspfad aufAPropertyfestlegen.ADO.NET-Objekte
Sie können eine Bindung an ADO.NET-Objekte erstellen (beispielsweise DataTable). DataView (ADO.NET) implementiert die IBindingList-Schnittstelle, die Änderungsbenachrichtigungen bereitstellt, an denen die Bindungs-Engine lauscht.
XML-Objekte
Sie können eine Bindung an
XPath-Abfragen erstellen und diese Abfragen für XmlNode, XmlDocument oder XmlElement ausführen. Eine bequeme Möglichkeit für den Zugriff auf XML-Daten, die die Bindungsquelle im Markup ist, besteht darin, ein XmlDataProvider-Objekt zu verwenden. Weitere Informationen finden Sie unter Binden an XML-Daten mithilfe eines XMLDataProvider und XPath-Abfragen (.NET Framework).Mit LINQ to XML können Sie auch eine Bindung an XElement, XDocument oder die Ergebnisse von Abfragen erstellen, die für Objekte dieser Typen ausgeführt werden. Eine bequeme Möglichkeit, LINQ to XML zu verwenden, um auf XML-Daten zuzugreifen, die als Bindungsquelle im Markup dienen, besteht darin, ein ObjectDataProvider-Objekt zu verwenden. Weitere Informationen finden Sie unter Bind to XDocument, XElement oder LINQ for XML Query Results (.NET Framework).
DependencyObject Objekte
Sie können eine Bindung an Abhängigkeitseigenschaften eines beliebigen DependencyObject-Objekts erstellen. Weitere Informationen finden Sie unter Binden Sie die Eigenschaften von zwei Steuerelementen (.NET Framework).
Implementieren einer Bindungsquelle für Ihre Objekte
Ihre CLR-Objekte können zu Bindungsquellen werden. Bei der Implementierung einer Klasse, die als Bindungsquelle dienen soll, sind einige Dinge zu beachten.
Bereitstellen von Änderungsbenachrichtigungen
Wenn Sie entweder OneWay oder TwoWay Bindung verwenden, implementieren Sie einen geeigneten Benachrichtigungsmechanismus für eine Eigenschaftsänderung. Der empfohlene Mechanismus besteht darin, dass die CLR oder eine dynamische Klasse die INotifyPropertyChanged-Schnittstelle implementiert. Weitere Informationen finden Sie unter How to: Implement Property Change Notification (.NET Framework).
Es gibt zwei Möglichkeiten, einen Abonnenten einer Eigenschaftsänderung zu benachrichtigen:
Implementieren Sie die INotifyPropertyChanged -Schnittstelle.
Dies ist der empfohlene Mechanismus für Benachrichtigungen. Das INotifyPropertyChanged liefert das PropertyChanged Ereignis, das vom Bindungssystem berücksichtigt wird. Indem Sie dieses Ereignis auslösen und den Namen der geänderten Eigenschaft angeben, benachrichtigen Sie ein Bindungsziel für die Änderung.
Implementieren Sie das
PropertyChangedMuster.Jede Eigenschaft, die ein Bindungsziel darüber benachrichtigen muss, dass es geändert wird, weist ein entsprechendes
PropertyNameChangedEreignis auf, wobeiPropertyNamees sich um den Namen der Eigenschaft handelt. Dieses Ereignis wird bei jeder Änderung der Eigenschaft ausgelöst.
Wenn Ihre Bindungsquelle einen dieser Benachrichtigungsmechanismen implementiert, erfolgen Zielaktualisierungen automatisch. Wenn Ihre Bindungsquelle aus irgendeinem Grund keine Benachrichtigungen zu den richtigen Geänderten Eigenschaften bereitstellt, können Sie die UpdateTarget Methode verwenden, um die Zieleigenschaft explizit zu aktualisieren.
Weitere Merkmale
Die folgende Liste enthält weitere wichtige Punkte:
Datenobjekte, die als Bindungsquellen dienen, können in XAML als Ressourcen deklariert werden, vorausgesetzt, sie verfügen über einen parameterlosen Konstruktor. Andernfalls müssen Sie das Datenobjekt im Code erstellen und es direkt dem Datenkontext Ihrer XAML-Objektstruktur oder als Bindungsquelle der Bindung zuweisen.
Die Eigenschaften, die Sie als Bindungsquelleneigenschaften verwenden, müssen öffentliche Eigenschaften Ihrer Klasse sein. Auf explizit definierte Schnittstelleneigenschaften kann nicht zu Bindungszwecken zugegriffen werden, noch können private, interne oder virtuelle Eigenschaften, die keine Basisimplementierung aufweisen, geschützt werden.
Sie können keine Bindung an öffentliche Felder erstellen.
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 Bindungsquelleigenschaft bestimmt. Wenn ein Unterschied beim Typ besteht, sollten Sie einen Konverter schreiben, um festzulegen, wie Ihre benutzerdefinierte Eigenschaft anfänglich an die Bindung übergeben wird. Weitere Informationen finden Sie unter IValueConverter.
Gesamte Objekte als Bindungsquelle
Sie können ein gesamtes Objekt als Bindungsquelle verwenden. Geben Sie eine Bindungsquelle mithilfe der Source Eigenschaft oder der DataContext Eigenschaft an, und geben Sie dann eine leere Bindungsdeklaration an: {Binding}. Szenarien, in denen dies hilfreich ist, umfassen die Bindung an Objekte, die vom Typ Zeichenfolge sind, die Bindung an Objekte mit mehreren Eigenschaften, an denen Sie interessiert sind, oder eine Bindung an Auflistungsobjekte. Ein Beispiel für die Bindung an ein gesamtes Auflistungsobjekt finden Sie unter How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework).
Möglicherweise müssen Sie benutzerdefinierte Logik anwenden, damit die Daten für Ihre gebundene Zieleigenschaft aussagekräftig sind. Die benutzerdefinierte Logik kann in Form eines benutzerdefinierten Konverters oder eines DataTemplate vorliegen. Weitere Informationen zu Konvertern finden Sie unter "Datenkonvertierung". Weitere Informationen zu Datenvorlagen finden Sie unter Data Templating Overview (.NET Framework).For more information about data templates, see Data Templating Overview (.NET Framework).
Sammlungsobjekte als Bindungsquelle
Häufig ist das Objekt, das Sie als Bindungsquelle verwenden möchten, eine Auflistung von benutzerdefinierten Objekten. Jedes Objekt dient als Quelle für eine Instanz einer wiederholten Bindung. Zum Beispiel könnte Ihre Anwendung eine CustomerOrders Sammlung haben, die aus CustomerOrder Objekten besteht, wobei sie die Sammlung durchläuft, um zu bestimmen, wie viele Bestellungen vorhanden sind und welche Daten in jeder Bestellung enthalten sind.
Sie können über jede Sammlung enumerieren, die die IEnumerable-Schnittstelle implementiert. Um dynamische Bindungen einzurichten, damit die Benutzeroberfläche nach Einfügungen oder Löschungen in der Sammlung automatisch aktualisiert wird, muss die Sammlung die INotifyCollectionChanged-Schnittstelle implementieren. Diese Schnittstelle macht ein Ereignis verfügbar, das ausgelöst werden muss, wenn sich die zugrunde liegende Auflistung ändert.
Die ObservableCollection<T>-Klasse ist eine integrierte Implementierung einer Datensammlung, die die INotifyCollectionChanged-Schnittstelle verfügbar macht. Die einzelnen Datenobjekte in der Sammlung müssen die zuvor beschriebenen Anforderungen erfüllen. Ein Beispiel finden Sie unter Erstellen und Binden an eine ObservableCollection (das .NET Framework). Bevor Sie Ihre eigene Auflistung implementieren, sollten Sie unter anderem die Verwendung ObservableCollection<T> oder eine der vorhandenen Auflistungsklassen wie List<T>, , Collection<T>und BindingList<T>, usw. in Betracht ziehen.
Wenn Sie eine Auflistung als Bindungsquelle angeben, bindet WPF nicht direkt an die Auflistung. Stattdessen bindet WPF tatsächlich an die Standardansicht der Auflistung. Informationen zu Standardansichten finden Sie unter Verwenden einer Standardansicht.
Wenn Sie über ein erweitertes Szenario verfügen und Ihre eigene Sammlung implementieren möchten, sollten Sie die IList-Schnittstelle verwenden. Diese Schnittstelle stellt eine nicht generische Auflistung von Objekten bereit, auf die einzeln nach Index zugegriffen werden kann, wodurch die Leistung verbessert werden kann.
Berechtigungsanforderungen in der Datenbindung
Im Gegensatz zu .NET Framework wird .NET mit voll vertrauenswürdiger Sicherheit ausgeführt. Alle Datenbindungen werden mit demselben Zugriff ausgeführt wie der Benutzer, der die Anwendung ausführt.
Siehe auch
.NET Desktop feedback