Übersicht über BindungsquellenBinding Sources Overview

Bei der Datenbindung verweist das Bindungsquellenobjekt auf das Objekt, aus dem Sie Daten abrufen.In data binding, the binding source object refers to the object you obtain data from. In diesem Thema werden die Objekttypen vorgestellt, die als Bindungsquelle verwendet werden können.This topic discusses the types of objects you can use as the binding source.

Typen von BindungsquellenBinding Source Types

Bei der Datenbindung in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) werden die folgenden Typen von Bindungsquellen unterstützt:Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) data binding supports the following binding source types:

BindungsquelleBinding Source BeschreibungDescription
Common Language Runtime (CLR)-Objektecommon language runtime (CLR) objects Sie können an die öffentlichen Eigenschaften, unter Eigenschaften und Indexer eines beliebigen Common Language Runtime (CLR)-Objekts binden.You can bind to public properties, sub-properties, as well as indexers, of any common language runtime (CLR) object. Die Bindungs-Engine verwendet die CLR-Reflektion, um die Werte der Eigenschaften zu erhalten.The binding engine uses CLR reflection to get the values of the properties. Alternativ können auch Objekte, ICustomTypeDescriptor die ein oder ein TypeDescriptionProvider registriertes implementieren, mit der Bindungs-Engine verwendet werden.Alternatively, objects that implement ICustomTypeDescriptor or have a registered TypeDescriptionProvider also work with the binding engine.

Weitere Informationen zum Implementieren einer Klasse, die als Bindungsquelle dienen kann, finden Sie weiter unten in diesem Thema unter Implementieren einer Klasse als Bindungsquelle.For more information about how to implement a class that can serve as a binding source, see Implementing a Class for the Binding Source later in this topic.
Dynamische Objektedynamic objects Sie können eine Bindung an verfügbare Eigenschaften und Indexer eines Objekts herstellen, das IDynamicMetaObjectProvider die-Schnittstelle implementiert.You can bind to available properties and indexers of an object that implements the IDynamicMetaObjectProvider interface. Wenn Sie auf den Member im Code zugreifen können, kann daran eine Bindung erfolgen.If you can access the member in code, you can bind to it. Wenn Sie z. B. mithilfe eines dynamischen Objekts auf einen Member im Code über someObjet.AProperty zugreifen können, können Sie durch Festlegen des Bindungspfads auf AProperty eine Bindung herstellen.For example, if a dynamic object enables you to access a member in code via someObjet.AProperty, you can bind to it by setting the binding path to AProperty.
ADO.NET-ObjekteADO.NET objects Sie können an ADO.NET-Objekte binden, z DataTable. b.You can bind to ADO.NET objects, such as DataTable. Der ADO.net DataView implementiert die IBindingList -Schnittstelle, die Änderungs Benachrichtigungen bereitstellt, auf die die Bindungs-Engine lauscht.The ADO.NET DataView implements the IBindingList interface, which provides change notifications that the binding engine listens for.
XMLXML-Objekteobjects Sie können eine Bindung an eine XPath XmlNode-, XmlDocument-oder XmlElement-Abfrage an ausführen und Abfragen ausführen.You can bind to and run XPath queries on an XmlNode, XmlDocument, or XmlElement. Eine bequeme Methode für den XMLXML Zugriff auf Daten, die die Bindungs Quelle im Markup sind, XmlDataProvider ist die Verwendung eines-Objekts.A convenient way to access XMLXML data that is the binding source in markup is to use an XmlDataProvider object. Weitere Informationen finden Sie unter Binden an XML-Daten mithilfe von XMLDataProvider und XPath-Abfragen.For more information, see Bind to XML Data Using an XMLDataProvider and XPath Queries.

Sie können auch eine Bindung an XElement ein XDocument-oder-Objekt oder eine Bindung an die Ergebnisse von Abfragen verwenden, die für Objekte dieser Typen ausgeführt werden, indem Sie LINQ to XML verwenden.You can also bind to an XElement or XDocument, or bind to the results of queries run on objects of these types by using LINQ to XML. Eine bequeme Möglichkeit, LINQ to XML für den Zugriff auf XML-Daten zu verwenden, die die Bindungs Quelle im Markup ObjectDataProvider ist, ist die Verwendung eines-Objekts.A convenient way to use LINQ to XML to access XML data that is the binding source in markup is to use an ObjectDataProvider object. Weitere Informationen finden Sie unter Binden an XDocument, XElement oder LINQ für XML-Abfrageergebnisse.For more information, see Bind to XDocument, XElement, or LINQ for XML Query Results.
DependencyObject-ObjekteDependencyObject objects Sie können an die Abhängigkeits Eigenschaften beliebiger DependencyObjectgebunden werden.You can bind to dependency properties of any DependencyObject. Ein Beispiel finden Sie unter Binden der Eigenschaften von zwei Steuerelementen.For an example, see Bind the Properties of Two Controls.

Implementieren einer Klasse als BindungsquelleImplementing a Class for the Binding Source

Sie können eigene Bindungsquellen erstellen.You can create your own binding sources. In diesem Abschnitt erfahren Sie, wie Sie eine Klasse als Bindungsquelle implementieren.This section discusses the things you need to know if you are implementing a class to serve as a binding source.

Bereitstellen von ÄnderungsbenachrichtigungenProviding Change Notifications

Wenn Sie entweder OneWay die-oder TwoWay die-Bindung verwenden UIUI (da Sie das aktualisieren möchten, wenn sich die Bindungs Quell Eigenschaften dynamisch ändern), müssen Sie einen geeigneten Benachrichtigungs Mechanismus für geänderte Eigenschaften implementieren.If you are using either OneWay or TwoWay binding (because you want your UIUI to update when the binding source properties change dynamically), you must implement a suitable property changed notification mechanism. Der empfohlene Mechanismus besteht darin, dass die CLR-Klasse oder die INotifyPropertyChanged dynamische Klasse die-Schnittstelle implementiert.The recommended mechanism is for the CLR or dynamic class to implement the INotifyPropertyChanged interface. Weitere Informationen finden Sie unter Implementieren von Benachrichtigungen bei Eigenschaftenänderungen.For more information, see Implement Property Change Notification.

Wenn Sie ein CLR-Objekt erstellen, das nicht INotifyPropertyChangedimplementiert, müssen Sie für Ihr eigenes Benachrichtigungssystem anordnen, um sicherzustellen, dass die in einer Bindung verwendeten Daten aktuell bleiben.If you create a CLR object that does not implement INotifyPropertyChanged, then you must arrange for your own notification system to make sure that the data used in a binding stays current. Sie können Änderungsbenachrichtigungen bereitstellen, indem Sie das PropertyChanged-Muster für jede Eigenschaft unterstützen, für die Änderungsbenachrichtigungen ausgegeben werden sollen.You can provide change notifications by supporting the PropertyChanged pattern for each property that you want change notifications for. 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.To support this pattern, you define a PropertyNameChanged event for each property, where PropertyName is the name of the property. Dieses Ereignis wird bei jeder Änderung der Eigenschaft ausgelöst.You raise the event every time the property changes.

Wenn die Bindungsquelle einen dieser Benachrichtigungsmechanismen implementiert, erfolgt die Aktualisierung des Ziels automatisch.If your binding source implements one of these notification mechanisms, target updates happen automatically. Wenn die Bindungs Quelle aus irgendeinem Grund die richtigen Benachrichtigungen über geänderte Eigenschaften nicht bereitstellt, können Sie die- UpdateTarget Methode verwenden, um die Ziel Eigenschaft explizit zu aktualisieren.If for any reason your binding source does not provide the proper property changed notifications, you have the option to use the UpdateTarget method to update the target property explicitly.

Weitere MerkmaleOther Characteristics

In der folgenden Liste finden Sie weitere zu beachtende Punkte:The following list provides other important points to note:

  • Wenn Sie das Objekt in XAMLXAMLerstellen möchten, muss die Klasse über einen Parameter losen Konstruktor verfügen.If you want to create the object in XAMLXAML, the class must have a parameterless constructor. In einigen .NET.NET Sprachen, wie z C#. b., kann der Parameter lose Konstruktor für Sie erstellt werden.In some .NET.NET languages, such as C#, the parameterless constructor might be created for you.

  • Die als Bindungsquelleigenschaften für eine Bindung verwendeten Eigenschaften müssen öffentliche Eigenschaften der Klasse sein.The properties you use as binding source properties for a binding must be public properties of your class. Explizit definierte Schnittstelleneigenschaften sowie geschützte, private, interne und virtuelle Eigenschaften können nicht für eine Bindung herangezogen werden.Explicitly defined interface properties cannot be accessed for binding purposes, nor can protected, private, internal, or virtual properties that have no base implementation.

  • An öffentliche Felder kann keine Bindung erfolgen.You cannot bind to public fields.

  • Der in der Klasse deklarierte Eigenschaftentyp ist der an die Bindung übergebene Typ.The type of the property declared in your class is the type that is passed to the binding. Allerdings wird der letztendlich in der Bindung verwendete Typ durch die Eigenschaft des Bindungsziels und nicht durch die Bindungsquelleigenschaft bestimmt.However, the type ultimately used by the binding depends on the type of the binding target property, not of the binding source property. 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.If there is a difference in type, you might want to write a converter to handle how your custom property is initially passed to the binding. Weitere Informationen finden Sie unter IValueConverter.For more information, see IValueConverter.

Verwenden von gesamten Objekten als BindungsquelleUsing Entire Objects as a Binding Source

Sie können das gesamte Objekt als Bindungsquelle verwenden.You can use an entire object as a binding source. Sie können eine Bindungs Quelle angeben, indem Sie Source die- DataContext Eigenschaft oder die-Eigenschaft verwenden und dann eine leere {Binding}Bindungs Deklaration bereitstellen:.You can specify a binding source by using the Source or the DataContext property, and then provide a blank binding declaration: {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.Scenarios in which this is useful include binding to objects that are of type string, binding to objects with multiple properties you are interested in, or binding to collection objects. Ein Beispiel für die Bindung an ein gesamtes Auflistungsobjekt finden Sie unter Verwenden des Master/Detail-Musters mit hierarchischen Daten.For an example of binding to an entire collection object, see Use the Master-Detail Pattern with Hierarchical Data.

Beachten Sie, dass Sie ggf. benutzerdefinierte Logik anwenden müssen, damit die Daten für die gebundene Zieleigenschaft sinnvoll sind.Note that you may need to apply custom logic so that the data is meaningful to your bound target property. Die benutzerdefinierte Logik kann ein benutzerdefinierter Konverter sein (wenn keine standardmäßige Typkonvertierung vorhanden ist) oder ein DataTemplate.The custom logic may be in the form of a custom converter (if default type conversion does not exist) or a DataTemplate. Weitere Informationen zu Konvertern finden Sie im Abschnitt „Datenkonvertierung“ in der Übersicht über die Datenbindung.For more information about converters, see the Data Conversion section of Data Binding Overview. Weitere Informationen zu Datenvorlagen finden Sie in der Übersicht über Datenvorlagen.For more information about data templates, see Data Templating Overview.

Verwenden von Auflistungsobjekten als BindungsquelleUsing Collection Objects as a Binding Source

Häufig handelt es sich bei dem Objekt, das Sie verwenden möchten, um eine Auflistung benutzerdefinierter Objekte.Often, the object you want to use as the binding source is a collection of custom objects. Jedes Objekt fungiert als Quelle für eine Instanz einer wiederholten Bindung.Each object serves as the source for one instance of a repeated binding. 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.For example, you might have a CustomerOrders collection that consists of CustomerOrder objects, where your application iterates over the collection to determine how many orders exist and the data contained in each.

Sie können jede Auflistung auflisten, die die IEnumerable -Schnittstelle implementiert.You can enumerate over any collection that implements the IEnumerable interface. Wenn Sie jedoch dynamische Bindungen einrichten möchten, damit die UIUI Einfügungen oder Löschungen in der Auflistung automatisch aktualisieren, muss die-Auflistung die INotifyCollectionChanged -Schnittstelle implementieren.However, to set up dynamic bindings so that insertions or deletions in the collection update the UIUI automatically, the collection must implement the INotifyCollectionChanged interface. Diese Schnittstelle macht ein Ereignis verfügbar, das bei jeder Änderung der zugrunde liegenden Auflistung ausgelöst werden muss.This interface exposes an event that must be raised whenever the underlying collection changes.

Die ObservableCollection<T> -Klasse ist eine integrierte Implementierung einer Datensammlung, die die INotifyCollectionChanged -Schnittstelle verfügbar macht.The ObservableCollection<T> class is a built-in implementation of a data collection that exposes the INotifyCollectionChanged interface. Die einzelnen Datenobjekte in der Auflistung müssen die zuvor beschriebenen Anforderungen erfüllen.The individual data objects within the collection must satisfy the requirements described in the preceding sections. Ein Beispiel finden Sie unter Erstellen und Binden an ObservableCollection.For an example, see Create and Bind to an ObservableCollection. Bevor Sie eine eigene Auflistung implementieren, erwägen Sie ObservableCollection<T> oder einer vorhandenen Sammlung Klassen, z. B. List<T>, Collection<T>, und BindingList<T>, a.Before implementing your own collection, consider using ObservableCollection<T> or one of the existing collection classes, such as List<T>, Collection<T>, and BindingList<T>, among many others.

WPF wird nie direkt an eine Auflistung gebunden.WPF never binds directly to a collection. Wenn Sie eine Auflistung als Bindungsquelle angeben, wird WPF an die Standardansicht der Auflistung gebunden.If you specify a collection as a binding source, WPF actually binds to the collection's default view. Weitere Informationen zu Standardansichten finden Sie in der Übersicht über die Datenbindung.For information about default views, see Data Binding Overview.

Wenn Sie ein erweitertes Szenario haben und eine eigene Sammlung implementieren möchten, sollten Sie die Verwendung der IList -Schnittstelle in Erwägung gezogen.If you have an advanced scenario and you want to implement your own collection, consider using the IList interface. IListstellt eine nicht generische Auflistung von Objekten bereit, auf die einzeln über einen Index zugegriffen werden kann, wodurch die Leistung verbessert werden kann.IList provides a non-generic collection of objects that can be individually accessed by index, which can improve performance.

Berechtigungsanforderungen bei der DatenbindungPermission Requirements in Data Binding

Bei der Datenbindung muss die Vertrauensebene der Anwendung beachtet werden.When data binding, you must consider the trust level of the application. 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:The following table summarizes what property types can be bound to in an application that is executing in either full trust or partial trust:

EigenschaftentypProperty type

(alle Zugriffsmodifizierer)(all access modifiers)
Dynamische ObjekteigenschaftDynamic object property Dynamische ObjekteigenschaftDynamic object property CLR-EigenschaftCLR property CLR-EigenschaftCLR property AbhängigkeitseigenschaftDependency property AbhängigkeitseigenschaftDependency property
VertrauensebeneTrust level Volle VertrauenswürdigkeitFull trust Teilweise VertrauenswürdigkeitPartial trust Volle VertrauenswürdigkeitFull trust Teilweise VertrauenswürdigkeitPartial trust Volle VertrauenswürdigkeitFull trust Teilweise VertrauenswürdigkeitPartial trust
Öffentliche KlassePublic class JaYes JaYes JaYes JaYes JaYes JaYes
Nicht öffentliche KlasseNon-public class JaYes NeinNo JaYes NeinNo JaYes JaYes

In dieser Tabelle werden die folgenden wichtigen Punkte bezüglich der bei der Datenbindung erforderlichen Berechtigungen beschrieben:This table describes the following important points about permission requirements in data binding:

  • Für CLR-Eigenschaften funktioniert die Datenbindung so lange, wie die Bindungs-Engine über Reflektion auf die Bindungs Quell Eigenschaft zugreifen kann.For CLR properties, data binding works as long as the binding engine is able to access the binding source property using reflection. Andernfalls wird von der Bindungs-Engine eine Warnung ausgegeben, dass die Eigenschaft nicht gefunden wurde. In diesem Fall wird der Fallbackwert bzw. der Standardwert (sofern verfügbar) verwendet.Otherwise, the binding engine issues a warning that the property cannot be found and uses the fallback value or the default value, if it is available.

  • Sie können eine Bindung an Eigenschaften für dynamische Objekte herstellen, die zur Kompilier- oder Laufzeit definiert werden.You can bind to properties on dynamic objects that are defined at compile time or run time.

  • Eine Bindung an Abhängigkeitseigenschaften ist immer möglich.You can always bind to dependency properties.

Die erforderlichen Berechtigungen für XMLXML-Bindungen sind ähnlich.The permission requirement for XMLXML binding is similar. In einer teilweise vertrauenswürdigen sandbox schlägt XmlDataProvider fehl, wenn Sie nicht über Berechtigungen für den Zugriff auf die angegebenen Daten verfügt.In a partial-trust sandbox, XmlDataProvider fails when it does not have permissions to access the specified data.

Objekte mit einem anonymen Typ sind intern.Objects with an anonymous type are internal. Eine Bindung an Eigenschaften anonymer Typen kann nur bei der Ausführung mit voller Vertrauenswürdigkeit hergestellt werden.You can bind to properties of anonymous types only when running in full trust. Weitere Informationen zu anonymen Typen finden Sie unter Anonyme Typen (C#-Programmierhandbuch) oder Anonyme Typen (Visual Basic).For more information about anonymous types, see Anonymous Types (C# Programming Guide) or Anonymous Types (Visual Basic) (Visual Basic).

Weitere Informationen zur Sicherheit bei teilweiser Vertrauenswürdigkeit finden Sie unter WPF-Sicherheit mit teilweiser Vertrauenswürdigkeit.For more information about partial-trust security, see WPF Partial Trust Security.

Siehe auchSee also