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 vollständigen Vergleich 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 Markuperweiterung {Binding}- wird beim Laden von XAML 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 am Steuerwert an die Quelleigenschaft übertragen werden. Die Eigenschaft, die das Ziel einer Datenbindung ist, muss eine Abhängigkeitseigenschaft sein. Weitere Informationen finden Sie unter Übersicht über Abhängigkeitseigenschaften.
{Binding}- hat die gleiche Rangfolge der Abhängigkeitseigenschaft wie ein lokaler Wert, und das Festlegen eines lokalen Werts im imperativen Code hebt die Wirkung eines im Markup festgelegten {Binding}- auf.
XAML-Attributverwendung
<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Begriff | BESCHREIBUNG |
---|---|
Eigenschaftspfad | Eine Zeichenfolge, die den Eigenschaftspfad für die Bindung angibt. Weitere Informationen finden Sie im Abschnitt Eigenschaftenpfad unten. |
Bindungseigenschaften |
propName=Wert[, propName=Wert]* Eine oder mehrere Bindungseigenschaften, die mithilfe einer Namens-/Wertpaarsyntax angegeben werden. |
propName | Der Zeichenfolgenname einer Eigenschaft, die für das Binding Objekt festgelegt werden soll. Beispiel: "Converter". |
Wert | Der Wert, auf den die Eigenschaft festgelegt werden soll. Die Syntax des Arguments hängt von der Eigenschaft Eigenschaften der Binding-Klasse ab, die mit {Binding} Abschnitt unten 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 von Path ist ein Eigenschaftspfad, der eine Zeichenfolge ist, die zu einer Eigenschaft oder Untereigenschaft Ihres benutzerdefinierten Typs oder eines Framework-Typs ausgewertet wird. Der Typ kann ein DependencyObjectsein, muss es aber nicht. Schritte in einem Eigenschaftenpfad werden durch Punkte (.) getrennt, und Sie können mehrere Trennzeichen verwenden, 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 Eigenschaft 'Vorname' eines Mitarbeiterobjekts zu binden, könnte ihr Eigenschaftspfad "Employee.FirstName" lauten. Wenn Sie eine Elementsteuerung an eine Eigenschaft binden, die die Angehörigen eines Mitarbeiters enthält, könnte Ihr Eigenschaftspfad beispielsweise "Employee.Dependents" lauten und die Elementvorlage der Steuerung würde die Darstellung der Elemente in "Angehörige" übernehmen.
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 Zeichen "[]" 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. 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 Animationsfunktionen und zum Erstellen eines PropertyPath--Objekts finden Sie unter Eigenschaftspfadsyntax.
Eigenschaften der Binding-Klasse, die mit {Binding} festgelegt werden können
{Binding}- wird mit der bindingProperties Platzhaltersyntax veranschaulicht, da mehrere Lese-/Schreib-Eigenschaften eines Binding- in der Markup-Erweiterung festgelegt werden können. Die Eigenschaften können in beliebiger Reihenfolge mit kommagetrennten propName=Wert Paaren festgelegt werden. Einige Eigenschaften erfordern Typen, die nicht über eine Typkonvertierung verfügen, sodass sie eigene Markuperweiterungen erfordern, die in der {Binding}geschachtelt sind.
Eigentum | BESCHREIBUNG |
---|---|
Pfad- | Siehe den Abschnitt Eigenschaftspfad oben. |
Konverter | Gibt ein Konverterobjekt an, das von der Bindungsmaschine 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 Konverter-festlegen.) Die Kultur wird als standardbasierter Bezeichner festgelegt. Weitere Informationen finden Sie unter ConverterLanguage |
Konverterparameter- | 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 abruft, um ihn zu konvertieren, und benötigen keinen ConverterParameter- Wert. Der parameter ConverterParameter ist für komplexere Konverterimplementierungen mit bedingter Logik bestimmt, die 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-Attributverfü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 Namen der Konstanten der BindingMode- Aufzählung. Der Standardwert ist "OneWay". Beachten Sie, dass sich dies von der Standardeinstellung für {x:Bind}-unterscheidet, was "OneTime" ist. |
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. Einstellen der {RelativeSource}-Markup-Erweiterung. |
Quelle | Gibt die Objektdatenquelle an. Innerhalb der Binding-Markuperweiterung erfordert die Source-Eigenschaft einen Objektverweis, z. B. einen {StaticResource}-Markuperweiterung-Verweis. Wenn diese Eigenschaft nicht angegeben ist, gibt der handelnde Datenkontext die Quelle an. Es ist üblicherweise nicht erforderlich, einen Source-Wert in einzelnen Bindungen anzugeben, sondern sich auf den gemeinsamen DataContext für mehrere Bindungen zu verlassen. Weitere Informationen finden Sie unter DataContext oder Datenbindung im Detail. |
ZielNullWert | Gibt einen Wert an, der angezeigt werden soll, wenn der Quellwert aufgelöst ist, jedoch explizit NULL. |
UpdateSourceTrigger | Gibt den Zeitpunkt von Aktualisierungen der Bindungsquelle an. Wenn nicht angegeben, ist der Standard Default. |
Hinweis Wenn Sie Markup von {x:Bind}- in {Binding}-konvertieren, beachten Sie die Unterschiede bei den Standardwerten für die eigenschaft Mode.
Converter, ConverterLanguage und ConverterLanguage stehen alle im Zusammenhang mit dem Szenario, einen Wert oder Typ aus der Bindungsquelle in einen Typ oder Wert zu konvertieren, der mit der Zieleigenschaft der Bindung kompatibel ist. Weitere Informationen und Beispiele finden Sie im Abschnitt „Datenkonvertierungen“ von Datenbindung im Detail.
Hinweis
Ab Windows 10, Version 1607, bietet das XAML-Framework einen integrierten booleschen zu Visibility-Konverter. Der Konverter ordnet true dem Wert der Visible-Enumeration zu und false dem Wert der Collapsed-Enumeration, sodass Sie eine Visibility-Eigenschaft direkt an einen booleschen Wert binden können, ohne einen separaten 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, RelativeSourceund ElementName geben eine Bindungsquelle an und schließen sich gegenseitig aus.
Tipp Wenn Sie eine einzelne geschweifte Klammer für einen Wert angeben müssen, wie etwa in Path oder ConverterParameter, dann fügen Sie einen umgekehrten Schrägstrich davor ein: \{
. Schließen Sie alternativ die gesamte Zeichenfolge, die die geschweiften Klammern enthält, in einen zusätzlichen Anführungszeichensatz ein, 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 verschiedene Binding-Eigenschaften festgelegt: ElementName, Path, Mode und Converter.
Path wird in diesem Fall explizit als Binding-Eigenschaft bezeichnet. Die Path wird in einer Datenquelle ausgewertet, die ein anderes Objekt in derselben Laufzeitobjektstruktur ist, einem Slider namens sliderValueConverter
.
Beachten Sie, dass der Wert der Converter--Eigenschaft eine weitere Markuperweiterung verwendet, die {StaticResource}-Markuperweiterung, wodurch hier zwei geschachtelte Markuperweiterungen genutzt werden. Das Innere wird zuerst ausgewertet, sodass nach Erhalt der Ressource ein praktischer IValueConverter (eine benutzerdefinierte Klasse, die vom local:S2Formatter
-Element in Ressourcen instanziiert wird) zur Verfügung steht, den die Bindung verwenden kann.
Tool-Unterstützung
Microsoft IntelliSense in Microsoft Visual Studio zeigt die Eigenschaften des Datenkontexts während der Erstellung von {Binding} im XAML-Markup-Editor an. Sobald Sie "{Binding" eingeben, werden die Datenkontexteigenschaften, die für Path geeignet sind, im Dropdown angezeigt. IntelliSense hilft auch bei den anderen Eigenschaften von Binding. Damit dies funktioniert, müssen Sie entweder den Datenkontext oder den Design-Zeit-Datenkontext in der Markupseite festgelegt haben. Gehe zu Definition (F12) funktioniert auch mit {Binding}. Alternativ können Sie das Dialogfeld "Datenbindung" verwenden.