{Binding}-Markuperweiterung
Hinweis
Ein neuer Bindungsmechanismus ist für Windows 10 verfügbar, der für leistung und Entwicklerproduktivität optimiert ist. Siehe {x:Bind}-Markuperweiterung.
Hinweis
Allgemeine Informationen zur Verwendung der Datenbindung in Ihrer App mit {Binding} (und für einen Gesamtvergleich zwischen {x:Bind} und {Binding}) finden Sie unter Datenbindung im Detail.
Die {Binding} -Markuperweiterung wird verwendet, um Eigenschaften für Steuerelemente an Werte zu binden, die aus einer Datenquelle stammen, z. B. Code. Die {Binding} -Markuperweiterung wird zur XAML-Ladezeit in eine Instanz der Binding-Klasse konvertiert. Dieses Bindungsobjekt ruft einen Wert aus einer Eigenschaft einer Datenquelle ab und verschiebt ihn an die Eigenschaft des Steuerelements. Das Bindungsobjekt kann optional konfiguriert werden, um Änderungen am Wert der Datenquelleneigenschaft zu beobachten und sich basierend auf diesen Änderungen zu aktualisieren. Sie kann optional auch so konfiguriert werden, dass Änderungen an den Steuerelementwert zurück an die Quelleigenschaft übertragen werden. Die Eigenschaft, die das Ziel einer Datenbindung ist, muss eine Abhängigkeitseigenschaft sein. Weitere Informationen finden Sie in der Übersicht über Abhängigkeitseigenschaften.
{Binding} hat die gleiche Rangfolge von Abhängigkeitseigenschaften wie ein lokaler Wert, und durch Festlegen eines lokalen Werts im imperativen Code wird die Auswirkung eines beliebigen {Binding} -Satzes im Markup entfernt.
XAML-Attributsyntax
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Begriff | Beschreibung |
---|---|
propertyPath | Eine Zeichenfolge, die den Eigenschaftspfad für die Bindung angibt. Weitere Informationen finden Sie unten im Abschnitt "Eigenschaftspfad ". |
bindingProperties | propName value[, propName==value]* Eine oder mehrere Bindungseigenschaften, die mithilfe einer Namens-/Wertpaarsyntax angegeben werden. |
propName | Der Zeichenfolgenname der Eigenschaft, die für das Binding-Objekt festgelegt werden soll. Beispiel: "Converter". |
value | Der für die Eigenschaft festzulegende Wert. Die Syntax des Arguments hängt von der Eigenschaft der Eigenschaften der Binding-Klasse ab, die unten mit dem Abschnitt "{Binding} " festgelegt werden kann. |
Eigenschaftspfad
Path beschreibt die Eigenschaft, an die Sie binden (die Quelleigenschaft). Path ist ein Positionsparameter, was bedeutet, dass Sie den Parameternamen explizit ({Binding Path=EmployeeID}
) verwenden können, oder Sie können ihn als ersten unbenannten Parameter ({Binding EmployeeID}
) angeben.
Der Pfadtyp ist ein Eigenschaftspfad, bei dem es sich um eine Zeichenfolge handelt, die zu einer Eigenschaft oder Untereigenschaft des benutzerdefinierten Typs oder eines Frameworktyps ausgewertet wird. Der Typ kann ein DependencyObject sein, muss aber nicht sein. Schritte in einem Eigenschaftspfad werden durch Punkte (.) getrennt, und Sie können mehrere Trennzeichen einschließen, um aufeinander folgende Untereigenschaften zu durchlaufen. Verwenden Sie das Punkttrennzeichen unabhängig von der Programmiersprache, an die das Objekt gebunden wird.
Um z. B. die UI an die Vornameneigenschaft eines Mitarbeiterobjekts zu binden, kann ihr Eigenschaftspfad "Employee.FirstName" lauten. Wenn Sie ein Elementsteuerelement an eine Eigenschaft binden, die die Abhängigen eines Mitarbeiters enthält, lautet ihr Eigenschaftspfad möglicherweise "Employee.Dependents", und die Elementvorlage des Elementsteuerelements übernimmt die Anzeige der Elemente in "Abhängige".
Wenn es sich bei der Datenquelle um eine Auflistung handelt, kann ein Eigenschaftspfad Elemente in der Auflistung anhand ihrer Position oder ihres Indexes angeben. Beispiel: "Teams[0]. Spieler", wobei das Literal "[]" den "0" umschließt, der das erste Element in einer Sammlung angibt.
Wenn Sie eine ElementName-Bindung an ein vorhandenes DependencyObject verwenden, können Sie angefügte Eigenschaften als Teil des Eigenschaftspfads verwenden. Wenn Sie eine angefügte Eigenschaft mehrdeutig machen möchten, damit der Zwischenpunkt im Namen der angefügten Eigenschaft nicht als Schritt in einen Eigenschaftspfad betrachtet wird, setzen Sie Klammern um den Namen der besitzerqualifizierten angefügten Eigenschaft; beispiel: (AutomationProperties.Name)
.
Ein Zwischenobjekt für den Eigenschaftspfad wird als PropertyPath-Objekt in einer Laufzeitdarstellung gespeichert, die meisten Szenarien müssen jedoch nicht mit einem PropertyPath-Objekt im Code interagieren. In der Regel können Sie die benötigten Bindungsinformationen mit XAML angeben.
Weitere Informationen zur Zeichenfolgensyntax für einen Eigenschaftspfad, Eigenschaftspfade in Animationsfeaturebereichen und zum Erstellen eines PropertyPath-Objekts finden Sie unter Property-Path-Syntax.
Eigenschaften der Binding-Klasse, die mit {Binding} festgelegt werden kann
{Binding} wird mit der Platzhaltersyntax bindingProperties veranschaulicht, da mehrere Lese-/Schreibeigenschaften einer Bindung vorhanden sind, die in der Markuperweiterung festgelegt werden kann. Die Eigenschaften können in beliebiger Reihenfolge mit kommagetrennten PropName-Wertpaaren= festgelegt werden. Einige eigenschaften erfordern Typen, die nicht über eine Typkonvertierung verfügen, daher erfordern diese Markuperweiterungen eigene, in { Binding} geschachtelte Markuperweiterungen.
Eigenschaft | Beschreibung |
---|---|
Pfad | Siehe den Abschnitt "Eigenschaftspfad " weiter oben. |
Konverter | Gibt ein Konverterobjekt an, das vom Bindungsmodul aufgerufen wird. Der Konverter kann im Markup mithilfe der {StaticResource}-Markuperweiterung festgelegt werden, um aus einem Ressourcenverzeichnis auf dieses Objekt zu verweisen. |
ConverterLanguage | Gibt die Kultur an, die vom Konverter verwendet werden soll. (Wenn Sie festlegen Converter.) Die Kultur wird als standardbasierte ID festgelegt. Weitere Informationen finden Sie unter ConverterLanguage |
ConverterParameter | Gibt einen Konverterparameter an, der in der Konverterlogik verwendet werden kann. (Wenn Sie festlegen Converter.) Die meisten Konverter verwenden einfache Logik, die alle benötigten Informationen aus dem übergebenen Wert abrufen, um zu konvertieren, und benötigen keinen ConverterParameter-Wert . Der Parameter ConverterParameter richtet sich an komplexere Konverterimplementierungen, die bedingte Logik aufweisen, mit der schlüsselt, was in ConverterParameter übergeben wird. Sie können einen Konverter schreiben, der andere Werte als Zeichenfolgen verwendet, dies ist jedoch ungewöhnlich. Weitere Informationen finden Sie in den Hinweisen in ConverterParameter . |
ElementName | Gibt eine Datenquelle an, indem auf ein anderes Element im selben XAML-Konstrukt verwiesen wird, das über eine Name-Eigenschaft oder ein x:Name-Attribut verfügt. Dies wird häufig verwendet, um verwandte Werte freizugeben oder Untereigenschaften eines UI-Elements zu verwenden, um einen bestimmten Wert für ein anderes Element bereitzustellen, z. B. in einer XAML-Steuerelementvorlage. |
FallbackValue | Gibt einen Wert an, der angezeigt werden soll, wenn die Quelle oder der Pfad nicht aufgelöst werden kann. |
Mode | Gibt den Bindungsmodus als einen der folgenden Werte an: "OneTime", "OneWay" oder "TwoWay". Diese entsprechen den Konstantennamen der BindingMode-Aufzählung. Der Standardwert ist "OneWay". Beachten Sie, dass sich dies von der Standardeinstellung für {x:Bind} unterscheidet, bei der es sich um "OneTime" handelt. |
RelativeSource | Gibt eine Datenquelle an, indem die Position der Bindungsquelle relativ zur Position des Bindungsziels beschrieben wird. Dies wird am häufigsten in Bindungen innerhalb von XAML-Steuerelementvorlagen verwendet. Festlegen der {RelativeSource}-Markuperweiterung. |
Quelle | Gibt die Objektdatenquelle an. Innerhalb der Binding-Markuperweiterung erfordert die Source-Eigenschaft einen Objektverweis, z. B. einen {StaticResource}-Markuperweiterungsverweis. Wenn diese Eigenschaft nicht angegeben ist, gibt der handelnde Datenkontext die Quelle an. Es ist typischer, keinen Quellwert in einzelnen Bindungen anzugeben und stattdessen den freigegebenen DataContext für mehrere Bindungen zu verwenden. Weitere Informationen finden Sie unter DataContext oder Datenbindung im Detail. |
TargetNullValue | Gibt einen Wert an, der angezeigt werden soll, wenn der Quellwert aufgelöst wird, aber explizit NULL ist. |
UpdateSourceTrigger | Gibt die Anzeigedauer von Bindungsquellenaktualisierungen an. Wenn nicht angegeben, lautet der Standardwert "Standard". |
Hinweis: Wenn Sie Markup von {x:Bind} in {Binding} konvertieren, beachten Sie die Unterschiede bei den Standardwerten für die Mode-Eigenschaft.
Converter, ConverterLanguage und ConverterLanguage beziehen sich alle auf das Szenario der Konvertierung eines Werts oder Typs aus der Bindungsquelle in einen Typ oder Wert, der mit der Bindungszieleigenschaft kompatibel ist. Weitere Informationen und Beispiele finden Sie im Abschnitt "Datenkonvertierungen" der Datenbindung im Detail.
Hinweis
Ab Windows 10, Version 1607, bietet das XAML-Framework einen integrierten booleschen zu Visibility-Konverter. Der Konverter ordnet den Wert der Visible-Aufzählung und "false" zu "Collapsed" zu, sodass Sie eine Visibility-Eigenschaft an einen booleschen Wert binden können, ohne einen Konverter zu erstellen. Für die Verwendung des integrierten Konverters muss die SDK-Zielversion der App mindestens 14393 lauten. Die Verwendung ist nicht möglich, wenn Ihre App für frühere Versionen von Windows 10 bestimmt ist. Weitere Informationen zu Zielversionen finden Sie unter Versionsadaptiver Code.
Source, RelativeSource und ElementName geben eine Bindungsquelle an, sodass sie sich gegenseitig ausschließen.
Tipp Wenn Sie eine einzelne geschweifte geschweifte Klammer für einen Wert angeben müssen, z. B. in Path oder ConverterParameter, stellen Sie ihm einen umgekehrten Schrägstrich voran: . \{
Schließen Sie alternativ die gesamte Zeichenfolge ein, die die geschweiften Klammern enthält, die in einem sekundären Anführungszeichensatz eingeschlossen werden müssen, z. B ConverterParameter='{Mix}'
. .
Beispiele
<!-- binding a UI element to a view model -->
<Page ... >
<Page.DataContext>
<local:BookstoreViewModel/>
</Page.DataContext>
<GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
<Page.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</Page.Resources>
<Slider x:Name="sliderValueConverter" ... />
<TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
Mode=OneWay,
Converter={StaticResource GradeConverter}}"/>
</Page>
Im zweiten Beispiel werden vier unterschiedliche Bindungseigenschaften festgelegt: ElementName, Pfad, Modus und Konverter. Der Pfad in diesem Fall wird explizit als Binding-Eigenschaft bezeichnet. Der Pfad wird zu einer Datenquelle ausgewertet, bei der es sich um ein anderes Objekt in derselben Laufzeitobjektstruktur handelt, einem Schieberegler mit dem Namen sliderValueConverter
.
Beachten Sie, dass der Wert der Converter-Eigenschaft eine weitere Markuperweiterung verwendet, {StaticResource}-Markuperweiterung, sodass hier zwei geschachtelte Markuperweiterungen verwendet werden. Das innere wird zuerst ausgewertet, sodass nach dem Abrufen der Ressource ein praktischer IValueConverter (eine benutzerdefinierte Klasse, die local:S2Formatter
vom Element in Ressourcen instanziiert wird) vorhanden ist, die die Bindung verwenden kann.
Unterstützung von Tools
Microsoft IntelliSense in Microsoft Visual Studio zeigt die Eigenschaften des Datenkontexts beim Erstellen von {Binding} im XAML-Markup-Editor an. Sobald Sie "{Binding" eingeben, werden die für Path geeigneten Datenkontexteigenschaften im Dropdownmenü angezeigt. IntelliSense hilft auch bei den anderen Eigenschaften von Binding. Damit dies funktioniert, müssen Sie entweder über den Datenkontext oder den Entwurfszeitdatenkontext auf der Markupseite verfügen. Go To Definition (F12) funktioniert auch mit {Binding}. Alternativ können Sie das Dialogfeld "Datenbindung" verwenden.