Bindung als Markuperweiterung
Überträgt einen Eigenschaftswert in einen datengebundenen Wert, indem ein Objekt für den Zwischenausdruck erstellt und der Datenkontext interpretiert wird, der auf das Element und seine Bindung zur Laufzeit angewendet wird.
Verwenden von Bindungsausdrücken
<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 der folgenden Syntax sind [] und * keine Literale. Es handelt sich um einen Teil einer Notation, mit der angegeben wird, dass 0 (null) oder mehr bindProp=Wert-Paare verwendet werden können, die durch ein ,-Trennzeichen getrennt sind und denen bindProp=Wert-Paare vorangestellt sind.
Jede der im Abschnitt "Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können" aufgeführten Eigenschaften können stattdessen mit Attributen eines Binding-Objektelements festgelegt werden. Dies ist jedoch nicht die wirkliche Markuperweiterungsverwendung von Binding, dies ist nur die allgemeine XAML-Verarbeitung von Attributen, die Eigenschaften der Binding-CRL-Klasse festlegen. Anders ausgedrückt ist <Binding bindProp1="Wert1"[ bindPropN="WertN"]*/> eine gleichwertige Syntax für Attribute der Binding-Objektelementverwendung anstelle einer Binding-Ausdrucksverwendung. Informationen zur XAML-Attributverwendung von bestimmten Eigenschaften von Binding finden Sie im Abschnitt "Verwendung von XAML-Attributen" der entsprechenden Eigenschaft von Binding in der .NET Framework-Klassenbibliothek.
XAML-Werte
bindProp1, bindPropN |
Der Name der festzulegenden Binding-Eigenschaft oder BindingBase-Eigenschaft. Nicht alle Binding-Eigenschaften können mit der Binding-Erweiterung festgelegt werden, und manche Eigenschaften können nur mit einem Binding-Ausdruck festgelegt werden, indem weitere verschachtelte Markuperweiterungen verwendet werden. Weitere Informationen finden Sie im Abschnitt "Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können". |
value1, valueN |
Der Wert, der für die Eigenschaft festgelegt wird. Die Behandlung des Attributwerts hängt letztendlich vom spezifischen Typ und von der Logik der spezifischen Binding-Eigenschaft ab, die festgelegt wird. |
path |
Die Pfadzeichenfolge, die die implizite Binding.Path-Eigenschaft festlegt. Siehe auch XAML-Syntax von PropertyPath. |
Nicht qualifiziertes {Binding}
Mit der in "Verwenden von Bindungsausdrücken" dargestellten {Binding}-Verwendung wird ein Binding-Objekt mit Standardwerten erstellt, das einen anfänglichen Binding.Path von null enthält. Dies ist in vielen Szenarios weiterhin nützlich, da die erstellte Binding möglicherweise wichtige Datenbindungseigenschaften wie Binding.Path und Binding.Source benötigt, die im Laufzeitdatenkontext festgelegt werden. Weitere Informationen zum Konzept des Datenkontexts finden Sie unter Datenbindung (WPF).
Impliziter Pfad
Die Binding-Markuperweiterung verwendet Binding.Path als konzeptionelle "Standardeigenschaft", wobei Path= nicht im Ausdruck angezeigt werden muss. Wenn Sie einen Binding-Ausdruck mit einem impliziten Pfad angeben, muss der implizite Pfad im Ausdruck an erster Stelle angegeben werden, vor anderen bindProp=value-Paaren, wobei die Binding-Eigenschaft durch den Namen angegeben wird. Beispiel: {Binding PathString}, wobei PathString eine Zeichenfolge ist, die als Wert von Binding.Path in der durch die Markuperweiterungsverwendung erstellten Binding ausgewertet wird. Sie können nach dem Komma als Trennzeichen einen impliziten Pfad mit anderen benannten Eigenschaften anfügen, z. B. {Binding LastName, Mode=TwoWay}.
Bindungseigenschaften, die mit der Bindungserweiterung festgelegt werden können
Die in diesem Thema veranschaulichte Syntax verwendet die generische Näherung bindProp=value, da es viele Eigenschaften von BindingBase oder Binding mit Lese-/Schreibzugriff gibt, die anhand der Binding-Markuperweiterungs-/Ausdruckssyntax festgelegt werden können. Sie können in jeder Reihenfolge festgelegt werden, mit Ausnahme eines impliziten Binding.Path. (Sie haben die Möglichkeit, Path= explizit anzugeben. In diesem Fall kann dies in jeder Reihenfolge festgelegt werden.) Grundsätzlich können Sie keine oder mehrere der in der folgenden Liste aufgeführten Eigenschaften festlegen, indem Sie bindProp=value-Paare verwenden und durch Kommas voneinander trennen.
Einige dieser Eigenschaftswerte erfordern Objekttypen, die keine systemeigene Typkonvertierung aus einer Textsyntax in XAML unterstützen. Für diese müssen daher Markuperweiterungen als Attributwert festgelegt werden. Im Abschnitt zur Verwendung von XAML-Attributen in der .NET Framework-Klassenbibliothek für die einzelnen Eigenschaften finden Sie weitere Informationen. Die Zeichenfolge, die Sie für die XAML-Attributsyntax mit oder ohne Verwendung weiterer Markuperweiterungen verwenden, entspricht im Grund dem Wert, den Sie in einem Binding-Ausdruck angeben, mit dem Unterschied, dass Sie um bindProp =value im Binding-Ausdruck keine Anführungszeichen einfügen.
BindingGroupName: Eine Zeichenfolge, die eine mögliche Bindungsgruppe identifiziert. Dies ist ein relativ komplexes Bindungskonzept, siehe Referenzseite für BindingGroupName.
BindsDirectlyToSource: Boolean, kann true oder false lauten. Die Standardeinstellung ist false.
Converter: Kann als bindProp=value-Zeichenfolge im Ausdruck festgelegt werden, hierzu ist jedoch ein Objektverweis für den Wert erforderlich, z. B. eine StaticResource-Markuperweiterung. Der Wert in diesem Fall ist eine Instanz einer benutzerdefinierten Konverterklasse.
ConverterCulture: Als standardbasierter Bezeichner im Ausdruck festlegbar. Weitere Informationen finden Sie im Referenzthema zu ConverterCulture.
ConverterParameter: Kann als bindProp=value-Zeichenfolge im Ausdruck festgelegt werden, dies ist jedoch vom Typ des übergebenen Parameters abhängig. Wenn der Typ durch einen Verweis übergeben wird, erfordert diese Verwendung einen Objektverweis, z. B. eine geschachtelte StaticResource-Markuperweiterung.
ElementName: Schließt sich mit RelativeSource und Source gegenseitig aus, jede dieser Bindungseigenschaften stellt eine bestimmte Bindungsmethodik dar. Weitere Informationen finden Sie unter Übersicht über Datenbindung.
FallbackValue: Kann als bindProp=value-Zeichenfolge im Ausdruck festgelegt werden, dies ist jedoch vom Typ des übergebenen Werts abhängig. Beim Übergeben eines Verweistyps ist ein Objektverweis erforderlich, z. B. eine geschachtelte StaticResource-Markuperweiterung.
IsAsync: Boolean, kann true oder false lauten. Die Standardeinstellung ist false.
Mode: Wert ist ein konstanter Name aus der BindingMode-Enumeration. Beispielsweise {Binding Mode=OneWay}.
NotifyOnSourceUpdated: Boolean, kann true oder false lauten. Die Standardeinstellung ist false.
NotifyOnTargetUpdated: Boolean, kann true oder false lauten. Die Standardeinstellung ist false.
NotifyOnValidationError: Boolean, kann true oder false lauten. Die Standardeinstellung ist false.
Path: Eine Zeichenfolge, die den Pfad für ein Datenobjekt oder ein allgemeines Objektmodell beschreibt. Das Format stellt mehrere unterschiedliche Konventionen zum Durchlaufen eines Objektmodells bereit, die in diesem Thema nicht ausführlich beschrieben werden können. Weitere Informationen finden Sie unter XAML-Syntax von PropertyPath.
RelativeSource: Schließt sich mit ElementName und Source gegenseitig aus. Jede dieser Bindungseigenschaften stellt eine bestimmte Bindungsmethodik dar. Weitere Informationen finden Sie unter Übersicht über Datenbindung. Erfordert eine geschachtelte RelativeSource-Markuperweiterung-Verwendung, um den Wert anzugeben.
Source: Schließt sich mit RelativeSource und ElementName gegenseitig aus, jede dieser Bindungseigenschaften stellt eine bestimmte Bindungsmethodik dar. Weitere Informationen finden Sie unter Übersicht über Datenbindung. Erfordert eine geschachtelte Erweiterungsverwendung, in der Regel eine StaticResource-Markuperweiterung, die aus einem Ressourcenwörterbuch mit Schlüssel auf eine Objektdatenquelle verweist.
StringFormat: Eine Zeichenfolge, die eine Zeichenfolgenformatkonvention für die gebundenen Daten beschreibt. Dies ist ein relativ komplexes Bindungskonzept, siehe Referenzseite für StringFormat.
TargetNullValue: Kann als bindProp=value-Zeichenfolge im Ausdruck festgelegt werden, dies ist jedoch vom Typ des übergebenen Parameters abhängig. Wenn ein Verweis für den Typ übergeben wird, ist ein Objektverweis erforderlich, z. B. eine geschachtelte StaticResource-Markuperweiterung.
UpdateSourceTrigger: Wert ist ein konstanter Name aus der UpdateSourceTrigger-Enumeration. Beispielsweise {Binding UpdateSourceTrigger=LostFocus}. Bestimmte Steuerelemente verfügen potenziell über andere Standardwerte für diese Bindungseigenschaft. Weitere Informationen finden Sie unter UpdateSourceTrigger.
ValidatesOnDataErrors: Boolean, kann true oder false lauten. Die Standardeinstellung ist false. Siehe Hinweise.
ValidatesOnExceptions: Boolean, kann true oder false lauten. Die Standardeinstellung ist false. Siehe Hinweise.
XPath: Eine Zeichenfolge, die den Pfad für das XML-DOM einer XML-Datenquelle beschreibt. Weitere Informationen finden Sie unter Gewusst wie: Binden an XML-Daten mithilfe von XMLDataProvider und XPath-Abfragen.
Folgende Binding-Eigenschaften können nicht mithilfe der Binding-Markuperweiterung/{Binding}-Ausdrucksform festgelegt werden.
UpdateSourceExceptionFilter: Diese Eigenschaft erwartet einen Verweis auf eine Rückrufimplementierung. Auf Rückrufe/Methoden, die keine Ereignishandler sind, kann nicht in XAML-Syntax verwiesen werden.
ValidationRules: Die Eigenschaft nimmt eine generische Auflistung von ValidationRule-Objekten an. Dies kann als Eigenschaftenelement in einem Binding-Objektelement ausgedrückt werden, es ist jedoch kein problemlos verfügbares Attributanalyseverfahren für die Verwendung in einem Binding-Ausdruck vorhanden. Siehe das Referenzthema zu ValidationRules.
Hinweise
Wichtig |
---|
Hinsichtlich des Vorrangs einer Abhängigkeitseigenschaft entspricht ein Binding-Ausdruck einem lokal festgelegten Wert.Wenn Sie einen lokalen Wert für eine Eigenschaft festlegen, die zuvor über einen Binding-Ausdruck verfügte, wird die Binding vollständig entfernt.Ausführliche Informationen finden Sie unter Priorität von Abhängigkeitseigenschaftswerten. |
Die Datenbindung auf einer grundlegenden Ebene wird in diesem Thema nicht behandelt. Weitere Informationen finden Sie unter Übersicht über Datenbindung.
Hinweis |
---|
MultiBinding und PriorityBinding unterstützen keine XAML-Erweiterungssyntax. Sie müssen stattdessen Eigenschaftenelemente verwenden.Siehe die Referenzthemen zu MultiBinding und PriorityBinding. |
Bei booleschen Werten für XAML wird die Groß-/Kleinschreibung nicht beachtet. Sie könnten z. B. {Binding NotifyOnValidationError=true} oder {Binding NotifyOnValidationError=True} angeben.
Bindungen mit Datenvalidierung werden in der Regel von einem expliziten Binding-Element angegeben und das Festlegen von {Binding ...}ValidatesOnDataErrors oder ValidatesOnExceptions in einem Ausdruck ist nicht üblich. Der Grund ist, dass die Begleiteigenschaft ValidationRules nicht unmittelbar im Ausdrucksformular festgelegt werden kann. Weitere Informationen finden Sie unter Gewusst wie: Implementieren der Bindungsvalidierung.
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 stärker global als Typkonverter sind, die bestimmten Typen oder Eigenschaften zugeordnet sind. Alle Markuperweiterungen in XAML verwenden die Zeichen { und } in der Attributsyntax. Dies ist die Konvention, durch die ein XAML-Prozessor erkennt, dass der Zeichenfolgeninhalt von einer Markuperweiterung verarbeitet werden muss. Weitere Informationen finden Sie unter Markuperweiterungen und WPF-XAML.
Binding ist insofern eine untypische Markuperweiterung, als dass die Binding-Klasse, die die Erweiterungsfunktion für die WPF-XAML-Implementierung implementiert, auch einige andere Methoden und Eigenschaften implementiert, die keinen Bezug zu XAML besitzen. Die anderen Member werden dazu verwendet, aus der Binding-Klasse eine vielseitigere und in sich geschlossene Klasse zu machen, die zusätzlich zu ihrer Funktion als XAML-Markuperweiterung viele Datenbindungsszenarien adressiert.