Freigeben über


Bindung als Markuperweiterung

Definiert einen Eigenschaftswert als datengebundenen Wert, wobei ein Zwischenausdrucksobjekt erstellt und der Datenkontext, der für das Element und seine Bindung gilt, zur Laufzeit interpretiert wird.

Verwendung des Bindungsausdrucks

<object property="{Binding}" .../>  
-or-  
<object property="{Binding  bindProp1=value1[, bindPropN=valueN]*}" ...  
/>  
-or-  
<object property="{Binding path}" .../>  
-or  
<object property="{Binding path[, bindPropN=valueN]*}" .../>  

Hinweise zur Syntax

In diesen Syntaxen sind die Inhaltstypen [] und * nicht Literale. Sie sind Teil einer Notation, die anzeigt, dass null oder mehr bindProp=-Wertepaare verwendet werden können, mit einem ,-Trennzeichen zwischen ihnen und den vorangehenden bindProp=-Wertepaaren.

Jede der Eigenschaften, die im Abschnitt „Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können“ aufgeführt sind, könnte stattdessen über Attribute eines Binding-Objektelements festgelegt werden. Das ist jedoch nicht wirklich die Markuperweiterungsverwendung von Binding, es ist nur die allgemeine XAML-Verarbeitung von Attributen, die Eigenschaften der CLR-Binding-Klasse festlegen. Mit anderen Worten: <Binding bindProp1="value1"[bindPropN="valueN"]*/> ist eine äquivalente Syntax für die Verwendung von Attributen des Binding-Objektelements anstelle der Verwendung eines Binding-Ausdrucks. Weitere Informationen zur XAML-Attributverwendung spezifischer Eigenschaften von Binding finden Sie im Abschnitt „XAML-Attributnutzung“ der relevanten Eigenschaft von Binding in der .NET Framework-Klassenbibliothek.

XAML-Werte

Wert Beschreibung
bindProp1, bindPropN Der Name der festzulegenden Eigenschaft Binding oder BindingBase. Nicht alle Binding-Eigenschaften können mit der Binding-Erweiterung festgelegt werden, und einige Eigenschaften sind nur mithilfe weiterer verschachtelter Markuperweiterungen in einem Binding-Ausdruck festgelegt. Siehe den Abschnitt „Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können“.
value1, valueN Der für die Eigenschaft festzulegende Wert. Die Bearbeitung des Attributwerts ist letztlich spezifisch für den Typ und die Logik der festgelegten spezifischen Binding-Eigenschaft.
path Die Pfadzeichenfolge, die die implizite Binding.Path-Eigenschaft festlegt. Siehe auch XAML-Syntax von PropertyPath.

Nicht qualifiziert {Bindung}

Die unter „Verwendung von Bindungsausdrücken“ gezeigte Verwendung von {Binding} erstellt ein Binding-Objekt mit Standardwerten, das einen anfänglichen Binding.Path von null enthält. Dies ist in vielen Szenarien weiterhin nützlich, da die erstellte Binding möglicherweise auf wichtige Datenbindungseigenschaften wie z. B. Binding.Path und Binding.Source, die im Laufzeitdatenkontext festgelegt werden, angewiesen ist. Weitere Informationen zum Konzept des Datenkontexts finden Sie unter Datenbindung.

Impliziter Pfad

Die Markuperweiterung Binding verwendet Binding.Path als konzeptionelle „Standardeigenschaft“, wo Path= nicht im Ausdruck erscheinen muss. Wenn Sie einen Binding-Ausdruck mit einem impliziten Pfad angeben, muss der implizite Pfad zuerst im Ausdruck erscheinen, vor anderen bindProp=value-Paaren, in denen die Binding-Eigenschaft nach Name angegeben wird. Beispiel: {Binding PathString}, wobei PathString eine Zeichenkette ist, die als der Wert von Binding.Path in dem von der Markup-Erweiterung erstellten Binding ausgewertet wird. Sie können einen impliziten Pfad mit anderen benannten Eigenschaften nach dem Komma-Trennzeichen anhängen, z. B. {Binding LastName, Mode=TwoWay}.

Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können

Die in diesem Thema gezeigte Syntax verwendet die generische bindProp=value-Näherung, da viele Lese-/Schreibeigenschaften von BindingBase oder Binding vorhanden sind, die über die Binding-Markuperweiterungs-/Ausdruckssyntax festgelegt werden können. Sie können in einer beliebigen Reihenfolge festgelegt werden, mit Ausnahme eines impliziten Binding.Path. (Sie haben die Möglichkeit, Path= explizit anzugeben, in welchem Fall er in beliebiger Reihenfolge festgelegt werden kann). Grundsätzlich können Sie null oder mehr der Eigenschaften in der nachstehenden Liste festlegen, indem Sie bindProp=value- Paare verwenden, die durch Kommas getrennt sind.

Mehrere dieser Eigenschaftenwerte erfordern Objekttypen, die keine native Typkonvertierung aus einer Textsyntax in XAML unterstützen und daher Markuperweiterungen benötigen, um als Attributwert festgelegt werden zu können. Überprüfen Sie im Abschnitt „Verwendung von XAML-Attributen“ in der .NET Framework-Klassenbibliothek für jede Eigenschaft weitere Informationen; die Zeichenfolge, die Sie für die XAML-Attributsyntax mit oder ohne weitere Verwendung von Markuperweiterungen benutzen, ist grundsätzlich identisch mit dem Wert, den Sie in einem Binding-Ausdruck angeben, mit der Ausnahme, dass Sie keine Anführungszeichen um jeden bindProp=value in dem Binding-Ausdruck platzieren.

Die folgenden Eigenschaften sind Eigenschaften von Binding, die nicht mithilfe des Binding-Markuperweiterungs-/{Binding} Ausdrucksformulars festgelegt werden können.

  • UpdateSourceExceptionFilter: Diese Eigenschaft erwartet einen Verweis auf eine Rückrufimplementierung. Rückrufe/Methoden außer Ereignishandlern können in der XAML-Syntax nicht verwiesen werden.

  • ValidationRules: die Eigenschaft verwendet eine generische Auflistung von ValidationRule-Objekten. Dies könnte als Eigenschaftselement in einem Binding-Ob-jektelement ausgedrückt werden, hat jedoch keine leicht verfügbare Attributanalysetechnik für die Verwendung in einem Binding-Ausdruck. Siehe Referenzthema für ValidationRules.

  • XmlNamespaceManager

Hinweise

Wichtig

Im Hinblick auf die Priorität der Abhängigkeitseigenschaft entspricht ein Binding-Ausdruck einem lokal festgelegten Wert. Wenn Sie einen lokalen Wert für eine Eigenschaft festlegen, die zuvor einen Binding-Ausdruck hatte, wird die Binding vollständig entfernt. Weitere Informationen finden Sie unter Priorität von Abhängigkeitseigenschaftswerten.

Die Beschreibung der Datenbindung auf einer grundlegenden Ebene wird in diesem Thema nicht behandelt. Siehe Übersicht über Datenbindung.

Hinweis

MultiBinding und PriorityBinding unterstützen keine XAML-Erweiterungssyntax. Stattdessen würde man Eigenschaftenelemente verwenden. Weitere Informationen zu MultiBinding und PriorityBinding finden Sie in den Referenzthemen.

Bei booleschen Werten für XAML wird die Groß- und Kleinschreibung nicht berücksichtigt. Sie können z. B. {Binding NotifyOnValidationError=true} oder {Binding NotifyOnValidationError=True} angeben.

Bindungen, die die Datenüberprüfung umfassen, werden in der Regel durch ein explizites Binding-Element und nicht als {Binding ...}-Ausdruck angegeben, und die Einstellungen ValidatesOnDataErrors oder ValidatesOnExceptions in einem Ausdruck sind ungewöhnlich. Dies liegt daran, dass die Begleiteigenschaft ValidationRules nicht einfach im Ausdrucksformular festgelegt werden kann. Weitere Informationen finden Sie unter Implementieren der Bindungsprüfung.

Binding ist eine Markuperweiterung. Markuperweiterungen werden in der Regel implementiert, wenn Attributwerte mit Escapezeichen versehen werden müssen, damit diese nicht als literale Werte oder als Handlernamen betrachtet werden, und diese Anforderung ist eher global und nicht nur durch den Einsatz von Typkonvertern für bestimmte Typen oder Eigenschaften geprägt. Alle Markuperweiterungen in XAML verwenden die Zeichen { und } in der Attributsyntax. Dies ist die Konvention, durch die ein XAML-Prozessor erkennt, dass die Zeichenfolgeninhalte von einer Markuperweiterung verarbeitet werden müssen. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.

Binding ist eine atypische Markuperweiterung, in der die Binding-Klasse, die die Erweiterungsfunktionalität für die XAML-Implementierung von WPF implementiert, auch mehrere andere Methoden und Eigenschaften implementiert, die nicht mit XAML verknüpft sind. Die anderen Member sollen Binding zu einer vielseitigeren und in sich geschlossenen Klasse machen, die neben ihrer Funktion als XAML-Markuperweiterung auch viele Datenbindungsszenarien abdecken kann.

Weitere Informationen