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.
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 des Steuerungswertes 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 das Festlegen eines lokalen Werts im imperativen Code entfernt den Effekt eines beliebigen {Binding} -Satzes im Markup.
XAML-Attributverwendung
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
| Begriff | Description |
|---|---|
| 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 Wert, auf den die Eigenschaft festgelegt werden soll. 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 Typ Path ist ein Eigenschaftspfad, der eine Zeichenfolge ist, die zu einer Eigenschaft oder Untereigenschaft entweder Ihres benutzerdefinierten Typs oder eines Frameworktyps ausgewertet wird. Der Typ kann ein DependencyObject sein, muss aber nicht sein. Schritte in einem Eigenschaftspfad werden durch Punkte (.) begrenzt, und es können mehrere Begrenzer verwendet werden, 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 Steuerelement für Elemente an eine Eigenschaft binden, die die Angehörigen eines Mitarbeiters enthält, lautet Ihr Eigenschaftspfad möglicherweise "Employee.Dependents", und die Vorlage des Steuerelements für Elemente übernimmt die Anzeige der Elemente in "Angehörige".
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].Players", wobei das Literal "[]" die "0" umschließt, die 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. Um eine angehängte Eigenschaft eindeutig zu machen, sodass der Punkt im Namen der angehängten Eigenschaft nicht als Schritt in einen Eigenschaftspfad betrachtet wird, setzen Sie Klammern um den vom Besitzer qualifizierten Namen der angehängten Eigenschaft; zum 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 BindingProperties-Platzhaltersyntax veranschaulicht, da es mehrere Lese-/Schreibeigenschaften einer Bindung gibt, 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 benötigen diese ihre eigenen Markuperweiterungen, die innerhalb von {Binding} geschachtelt sind.
| Eigentum | Description |
|---|---|
| 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 Converter festlegen.) Die Kultur wird als standardbasierte Kennung festgelegt. Weitere Informationen finden Sie unter ConverterLanguage |
| ConverterParameter | Gibt einen Konverterparameter an, der in der Konverterlogik verwendet werden kann. (Wenn Sie "Converter" festlegen.) 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 ConverterParameter-Parameter ist für komplexere Konverterimplementierungen vorgesehen, die bedingte Logik verwenden, die auf dem basiert, was im 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. |
| Modus | 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 Zeitsteuerung von Aktualisierungen der Bindungsquelle 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 Boolescher-Wert-zu-Sichtbarkeits-Konverter. Der Konverter ordnet true dem Visible-Enumerationswert und false dem Collapsed zu, sodass Sie eine Visibility-Eigenschaft an einen booleschen Wert binden können, ohne einen Konverter zu erstellen. Um den integrierten Konverter zu verwenden, muss die Mindestziel-SDK-Version Ihrer App 14393 oder höher sein. Sie können sie nicht verwenden, wenn Ihre App auf frühere Versionen von Windows 10 ausgerichtet ist. Weitere Informationen zu Zielversionen finden Sie unter Versionsadaptiven Code.
Source, RelativeSource und ElementName geben eine Bindungsquelle an, sodass sie sich gegenseitig ausschließen.
Tipp
Wenn Sie eine einzelne 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}'. .
Examples
<!-- 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 Quelle für Datenbindung ausgewertet, das ein anderes Objekt im selben Laufzeitobjektbaum ist, ein Schieberegler mit dem Namen sliderValueConverter.
Beachten Sie, dass der Wert der Converter-Eigenschaft eine weitere Markuperweiterung verwendet, die {StaticResource}-Markuperweiterung, sodass hier zwei geschachtelte Markuperweiterungen vorliegen. Das innere wird zuerst ausgewertet, sodass nach dem Abrufen der Ressource ein funktionsfähiger IValueConverter (eine benutzerdefinierte Klasse, die vom local:S2Formatter Element in Ressourcen instanziiert wird) vorhanden ist, den 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 auf der Markupseite entweder den Datenkontext oder den Entwurfszeitdatenkontext gesetzt haben. Go To Definition (F12) funktioniert auch mit {Binding}. Alternativ können Sie das Dialogfeld "Datenbindung" verwenden.
Windows developer