{Binding}-Markuperweiterung{Binding} markup extension

Hinweis

Für Windows 10 ist ein neuer Bindungs Mechanismus verfügbar, der für die Leistung und die Produktivität von Entwicklern optimiert ist.A new binding mechanism is available for Windows 10, which is optimized for performance and developer productivity. Siehe {x:Bind}-Markup Erweiterung.See {x:Bind} markup extension.

Hinweis

Allgemeine Informationen zur Verwendung der Datenbindung in Ihrer APP mit {Binding} (und für einen gesamten Vergleich zwischen {x:Bind} und {Binding}) finden Sie unter Ausführliche Informationen zur Datenbindung.For general info about using data binding in your app with {Binding} (and for an all-up comparison between {x:Bind} and {Binding}), see Data binding in depth.

Die {Binding} -Markup Erweiterung wird verwendet, um Eigenschaften von Steuerelementen an Werte zu binden, die aus einer Datenquelle, z. b. Code, stammen.The {Binding} markup extension is used to data bind properties on controls to values coming from a data source such as code. Die {Binding} -Markup Erweiterung wird bei der XAML-Ladezeit in eine Instanz der Binding -Klasse konvertiert.The {Binding} markup extension is converted at XAML load time into an instance of the Binding class. Dieses Bindungsobjekt erhält einen Wert von der Eigenschaft einer Datenquelle und leitet ihn an die Eigenschaft des Steuerelements weiter.This binding object gets a value from a property on a data source, and pushes it to the property on the control. Das Bindungsobjekt kann optional konfiguriert werden, um Änderungen am Wert der Datenquelleneigenschaft zu beobachten und sich basierend auf diesen Änderungen zu aktualisieren.The binding object can optionally be configured to observe changes in the value of the data source property and update itself based on those changes. Es kann optional auch so konfiguriert werden, dass Änderungen am Wert des Steuerelements per Push zurück an die Quelleigenschaft gesendet werden.It can also optionally be configured to push changes to the control value back to the source property. Die als Ziel einer Datenbindung verwendete Eigenschaft muss eine Abhängigkeitseigenschaft sein.The property that is the target of a data binding must be a dependency property. Weitere Informationen finden Sie unter Übersicht über Abhängigkeitseigenschaften.For more info, see Dependency properties overview.

{Binding} weist die gleiche Rangfolge für Abhängigkeitseigenschaften auf wie ein lokaler Wert. So wird beim Festlegen eines lokalen Werts im imperativen Code der Effekt aller im Markup festgelegten {Binding}-Objekte entfernt.{Binding} has the same dependency property precedence as a local value, and setting a local value in imperative code removes the effect of any {Binding} set in markup.

XAML-AttributsyntaxXAML attribute usage

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
BegriffTerm BESCHREIBUNGDescription
PropertyPathpropertyPath Eine Zeichenfolge, die den Eigenschaftspfad für die Bindung angibt.A string that specifies the property path for the binding. Weitere Informationen finden Sie unten im Abschnitt Eigenschaftspfad.More info is in the Property path section below.
bindingPropertiesbindingProperties propName = Wert [ , propName- = Wert]*propName=value[, propName=value]*
Mindestens eine Bindungseigenschaft, die mithilfe einer Name-Wert-Paarsyntax angegeben wird.One or more binding properties that are specified using a name/value pair syntax.
propNamepropName Der Zeichen folgen Name der Eigenschaft, die für das Bindungs Objekt festgelegt werden soll.The string name of the property to set on the Binding object. Beispiel: „Konverter“.For example, "Converter".
valuevalue Der für die Eigenschaft festzulegende Wert.The value to set the property to. Die Syntax des Arguments hängt von der Eigenschaft der festgelegten Binding-Klasse ab. Weitere Informationen finden Sie unten im Abschnitt Mit {Binding} festlegbare Eigenschaften der Bindungsklasse.The syntax of the argument depends on the property of Properties of the Binding class that can be set with {Binding} section below.

EigenschaftspfadProperty path

Path beschreibt die Eigenschaft, an die Sie binden (die Quelleigenschaft).Path describes the property that you're binding to (the source property). „Path“ ist ein Positionsparameter. Das bedeutet, dass Sie den Parameternamen explizit verwenden können ({Binding Path=EmployeeID}) oder dass Sie ihn als ersten nicht benannten Parameter angeben können ({Binding EmployeeID}).Path is a positional parameter, which means you can use the parameter name explicitly ({Binding Path=EmployeeID}), or you can specify it as the first unnamed parameter ({Binding EmployeeID}).

Der Path-Typ ist ein Eigenschaftspfad. Es handelt sich dabei um eine Zeichenfolge, die als Eigenschaft oder Untereigenschaft Ihres benutzerdefinierten Typs oder eines Frameworktyps ausgewertet wird.The type of Path is a property path, which is a string that evaluates to a property or sub-property of either your custom type or a framework type. Der Typ kann auch eine DependencyObject-Klasse sein.The type can be, but does not need to be, a DependencyObject. Die Schritte in einem Eigenschaftspfad werden durch Punkte getrennt (.), und Sie können mehrere Trennzeichen angeben, um aufeinander folgende untergeordnete Eigenschaften zu durchlaufen.Steps in a property path are delimited by dots (.), and you can include multiple delimiters to traverse successive sub-properties. Verwenden Sie unabhängig von der verwendeten Programmiersprache einen Punkt als Trennzeichen, um das Objekt zu implementieren, an das die Bindung erfolgt.Use the dot delimiter regardless of the programming language used to implement the object being bound to.

Zum Binden der Benutzeroberfläche an die Vornameneigenschaft eines Mitarbeiterobjekts können Sie z. B. „Employee.FirstName“ als Eigenschaftspfad verwenden.For example, to bind UI to an employee object's first name property, your property path might be "Employee.FirstName". Wenn Sie ein ItemsControl-Element an eine Eigenschaft binden, die die abhängigen Elemente des Mitarbeiters enthält, kann der Eigenschaftspfad „Employee.Dependents“ lauten, und die Elementvorlage des ItemsControl-Elements wäre für die Anzeige der Elemente „Dependents“ verantwortlich.If you are binding an items control to a property that contains an employee's dependents, your property path might be "Employee.Dependents", and the item template of the items control would take care of displaying the items in "Dependents".

Wenn die Datenquelle eine Auflistung ist, kann der Eigenschaftspfad Elemente in der Auflistung anhand ihrer Position oder ihres Indexes angeben.If the data source is a collection, then a property path can specify items in the collection by their position or index. Beispiel: "Teams [ 0 ] . Players ", wobei das Literale" [ ] "den Wert" 0 "einschließt, der das erste Element in einer Auflistung angibt.For example, "Teams[0].Players", where the literal "[]" encloses the "0" that specifies the first item in a collection.

Wenn Sie eine ElementName-Eigenschaft an eine vorhandene DependencyObjectKlasse binden, können Sie angefügte Eigenschaften als Teil des Eigenschaftspfads verwenden.When using an ElementName binding to an existing DependencyObject, you can use attached properties as part of the property path. Wenn Sie eine angefügte Eigenschaft eindeutig machen möchten, damit der Zwischenpunkt im Namen der angefügten Eigenschaften nicht als Schritt in einen Eigenschaftspfad angesehen wird, müssen Sie Klammern um den besitzerqualifizierten Namen der angefügten Eigenschaft setzen – z. B. (AutomationProperties.Name).To disambiguate an attached property so that the intermediate dot in the attached property name is not considered a step into a property path, put parentheses around the owner-qualified attached property name; for example, (AutomationProperties.Name).

Es wird ein Zwischenobjekt des Eigenschaftspfads als PropertyPath-Objekt in einer Laufzeitdarstellung gespeichert, in den meisten Fällen ist jedoch keine Interaktion mit einem PropertyPath-Objekt im Code erforderlich.A property path intermediate object is stored as a PropertyPath object in a run-time representation, but most scenarios won't need to interact with a PropertyPath object in code. Sie können i. d. R. die Bindungsinformationen angeben, wenn Sie XAML verwenden möchten.You can usually specify the binding info you need using XAML.

Weitere Informationen zur Zeichenfolgensyntax für einen Eigenschaftspfad, zu Eigenschaftspfaden in Animationsfeaturebereichen und zum Erstellen eines PropertyPath-Objekts finden Sie unter Property-path syntax.For more info about the string syntax for a property path, property paths in animation feature areas, and constructing a PropertyPath object, see Property-path syntax.

Mit {Binding} festlegbare Eigenschaften der BindungsklasseProperties of the Binding class that can be set with {Binding}

{Binding} wird mit der bindingProperties-Platzhaltersyntax angegeben, da in der Markuperweiterung mehrere Lese-/Schreibeigenschaften einer Binding-Klasse festgelegt werden können.{Binding} is illustrated with the bindingProperties placeholder syntax because there are multiple read/write properties of a Binding that can be set in the markup extension. Die Eigenschaften können in beliebiger Reihenfolge mit durch Trennzeichen getrennten propName- = Wert -Paaren festgelegt werden.The properties can be set in any order with comma-separated propName=value pairs. Für einige Eigenschaften sind Typen erforderlich, die keine Typkonvertierung enthalten, sodass für diese eigene innerhalb von {Binding} geschachtelte Markuperweiterungen erforderlich sind.Some of the properties require types that don't have a type conversion, so these require markup extensions of their own nested within the {Binding}.

EigenschaftProperty BESCHREIBUNGDescription
PathPath Weitere Informationen finden Sie weiter oben im Abschnitt Eigenschaftspfad.See the Property path section above.
ConverterConverter Gibt ein Konverterobjekt an, das vom Bindungsmodul aufgerufen wird.Specifies a converter object that is called by the binding engine. Der Konverter kann im Markupcode mit der {StaticResource}-Markuperweiterung festgelegt werden, um aus einem Ressourcenwörterbuch auf dieses Objekt zu verweisen.The converter can be set in markup using the {StaticResource} markup extension to reference to that object from a resource dictionary.
ConverterLanguageConverterLanguage Gibt die Kultur an, die vom Konverter verwendet werden soll.Specifies the culture to be used by the converter. (Wenn Sie eine Converter-Eigenschaft festlegen.) Die Kultur kann als standardbasierter Bezeichner festgelegt werden.(If you're setting Converter.) The culture is set as a standards-based identifier. Weitere Informationen finden Sie unter converterlanguageFor more info, see ConverterLanguage
ConverterParameterConverterParameter Gibt einen Konverterparameter an, der in der Konverterlogik verwendet werden kann.Specifies a converter parameter that can be used in converter logic. (Wenn Sie eine Converter-Eigenschaft festlegen.) Die meisten Konverter verwenden einfache Logik und rufen alle erforderlichen Informationen aus dem zu konvertierenden übergebenen Wert ab. Sie benötigen keinen ConverterParameter-Wert.(If you're setting Converter.) Most converters use simple logic that get all the info they need from the passed value to convert, and don't need a ConverterParameter value. Der ConverterParameter-Parameter ist für komplexere Konverterimplementierungen mit bedingter Logik gedacht, bei der überprüft wird, was in ConverterParameter übergeben wird.The ConverterParameter parameter is for more complex converter implementations that have conditional logic that keys off what's passed in ConverterParameter. Sie können auch einen Konverter schreiben, der keine Zeichenfolgenwerte verwendet. Dies ist jedoch sehr ungewöhnlich. Weitere Informationen finden Sie in den „Anmerkungen“ zu ConverterParameter.You can write a converter that uses values other than strings but this is uncommon, see Remarks in ConverterParameter for more info.
ElementNameElementName Gibt eine Datenquelle durch Verweis auf ein anderes Element in demselben XAML-Konstrukt an, das über eine Name-Eigenschaft oder ein x:Name-Attribut verfügt.Specifies a data source by referencing another element in the same XAML construct that has a Name property or x:Name attribute. Damit werden häufig zusammengehörige Werte oder Untereigenschaften eines Benutzeroberflächenelements gemeinsam verwendet, um einen bestimmten Wert für ein anderes Element bereitzustellen, z. B. in einer XAML-Steuerelementvorlage.This is often use to share related values or use sub-properties of one UI element to provide a specific value for another element, for example in a XAML control template.
FallbackValueFallbackValue Gibt einen Wert an, der angezeigt wird, wenn die Quelle oder der Pfad nicht aufgelöst werden können.Specifies a value to display when the source or path cannot be resolved.
ModeMode Gibt den Bindungsmodus als einen der folgenden Werte an: „OneTime“, „OneWay“ oder „TwoWay“.Specifies the binding mode, as one of these values: "OneTime", "OneWay", or "TwoWay". Diese Zeichenfolgen entsprechen den Konstantennamen der BindingMode-Enumeration.These correspond to the constant names of the BindingMode enumeration. Der Standardwert ist "OneWay".The default is "OneWay". Beachten Sie, dass dieser vom Standard für {x:Bind} abweicht, der „OneTime“ lautet.Note that this differs from the default for {x:Bind}, which is "OneTime".
RelativeSourceRelativeSource Gibt durch das Beschreiben der Position der Bindungsquelle relativ zur Position des Bindungsziels eine Datenquelle an.Specifies a data source by describing the position of the binding source relative to the position of the binding target. Dies wird am häufigsten in Bindungen innerhalb von XAML-Steuervorlagen verwendet.This is most often used in bindings within XAML control templates. Legen Sie die {RelativeSource}-Markuperweiterung fest.Setting the {RelativeSource} markup extension.
SourceSource Gibt die Objektdatenquelle an.Specifies the object data source. In der Binding-Markuperweiterung erfordert die Source-Eigenschaft einen Objektverweis, beispielsweise einen Verweis in der {StaticResource}-MarkuperweiterungWithin the Binding markup extension, the Source property requires an object reference, such as a {StaticResource} markup extension reference. Ist die Eigenschaft nicht angegeben, wird die Quelle vom aktiven Datenkontext angegeben.If this property is not specified, the acting data context specifies the source. Häufig wird ein Source-Wert nicht in einzelnen Bindungen angegeben, sondern stattdessen der gemeinsame DataContext für mehrere Bindungen verwendet.It's more typical to not specify a Source value in individual bindings, and instead to rely on the shared DataContext for multiple bindings. Weitere Informationen finden Sie unter DataContext oder Datenbindung im Detail.For more info see DataContext or Data binding in depth.
TargetNullValueTargetNullValue Gibt einen Wert an, der angezeigt wird, wenn der Quellwert aufgelöst werden kann, aber explizit null ist.Specifies a value to display when the source value resolves but is explicitly null.
UpdateSourceTriggerUpdateSourceTrigger Gibt den Zeitpunkt für Aktualisierungen von Bindungsquellen an.Specifies the timing of binding source updates. Wenn keine Angabe erfolgt, lautet der Standardwert Default.If unspecified, the default is Default.

Hinweis    Wenn Sie Markup von {x:Bind} in {Binding} umrechnen, beachten Sie die Unterschiede in den Standardwerten für die Mode -Eigenschaft.Note  If you're converting markup from {x:Bind} to {Binding}, then be aware of the differences in default values for the Mode property.

Converter, ConverterLanguage und ConverterLanguage hängen mit der Konvertierung eines Werts oder Typs aus der Bindungsquelle in einen mit der Bindungszieleigenschaft kompatiblen Typ oder Wert zusammen.Converter, ConverterLanguage and ConverterLanguage are all related to the scenario of converting a value or type from the binding source into a type or value that is compatible with the binding target property. Weitere Informationen und Beispiele finden Sie im Abschnitt „Datenkonvertierungen“ unter Datenbindung im Detail.For more info and examples, see the "Data conversions" section of Data binding in depth.

Hinweis

Ab Windows 10, Version 1607, wird über das XAML-Framework ein integrierter Konverter für die Konvertierung eines booleschen Operanden in einen Sichtbarkeitszustand bereitgestellt.Starting in Windows 10, version 1607, the XAML framework provides a built in Boolean to Visibility converter. Der Konverter ordnet dem sichtbaren Enumerationswert true zu, und false wird reduziert , sodass Sie eine Sichtbarkeits Eigenschaft an einen booleschen Wert binden können, ohne einen Konverter zu erstellen.The converter maps true to the Visible enumeration value and false to Collapsed so you can bind a Visibility property to a Boolean without creating a converter. Für die Verwendung des integrierten Konverters muss die SDK-Zielversion der App mindestens 14393 lauten.To use the built in converter, your app's minimum target SDK version must be 14393 or later. Die Verwendung ist nicht möglich, wenn Ihre App für frühere Versionen von Windows 10 bestimmt ist.You can't use it when your app targets earlier versions of Windows 10. Weitere Informationen zu Zielversionen finden Sie unter Versionsadaptiver Code.For more info about target versions, see Version adaptive code.

Source, RelativeSource und ElementName geben eine Bindungsquelle an und schließen sich somit gegenseitig aus.Source, RelativeSource, and ElementName specify a binding source, so they are mutually exclusive.

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: \{ .Tip  If you need to specify a single curly brace for a value, such as in Path or ConverterParameter, then precede it with a backslash: \{. Setzen Sie alternativ die gesamte Zeichenfolge mit den geschweiften Klammern, für die Escapezeichen verwendet werden müssen, in weitere Anführungszeichen, z. B. ConverterParameter='{Mix}'.Alternatively, enclose the entire string that contains the braces that need escaping in a secondary quotation set, for example ConverterParameter='{Mix}'.

BeispieleExamples

<!-- 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 Binding-Eigenschaften festgelegt: ElementName, Path, Mode und Converter.The second example sets four different Binding properties: ElementName, Path, Mode and Converter. Path wird in diesem Fall explizit als Binding-Eigenschaft benannt gezeigt.Path in this case is shown explicitly named as a Binding property. Die Path-Eigenschaft wird zu einer Datenbindungsquelle ausgewertet, bei der es sich um ein anderes Objekt in derselben Laufzeit-Objektstruktur handelt – ein Slider mit dem Namen sliderValueConverter.The Path is evaluated to a data binding source that is another object in the same run-time object tree, a Slider named sliderValueConverter.

Beachten Sie, dass der Converter-Eigenschaftswert eine weitere Markuperweiterung ({StaticResource} markup extension) verwendet, sodass hier zwei geschachtelte Markuperweiterungssyntaxen zu sehen sind.Note how the Converter property value uses another markup extension, {StaticResource} markup extension, so there are two nested markup extension usages here. Die innere Syntax wird zuerst ausgewertet. Nach dem Abrufen der Ressource ist daher ein IValueConverter verfügbar (eine benutzerdefinierte Klasse, die vom local:S2Formatter-Element in Ressourcen instanziiert wird), den die Bindung verwenden kann.The inner one is evaluated first, so that once the resource is obtained there's a practical IValueConverter (a custom class that's instantiated by the local:S2Formatter element in resources) that the binding can use.

Unterstützung von ToolsTools support

Mit Microsoft IntelliSense in Microsoft Visual Studio werden die Eigenschaften des Datenkontexts beim Erstellen von {Binding} im XAML-Markup-Editor angezeigt.Microsoft IntelliSense in Microsoft Visual Studio displays the properties of the data context while authoring {Binding} in the XAML markup editor. Sobald Sie „{Binding“ eingeben, werden für die Path-Eigenschaft geeignete Datenkontexteigenschaften in der Dropdownliste angezeigt.As soon as you type "{Binding", data context properties appropriate for Path are displayed in the dropdown. IntelliSense bietet auch Unterstützung für andere Eigenschaften von Binding.IntelliSense also helps with the other properties of Binding. Damit dies funktioniert muss der Datenkontext oder der Entwurfszeit-Datenkontext auf der Markupseite festgelegt werden.For this to work, you must have either the data context or the design-time data context set in the markup page. Gehe zu Definition (F12) funktioniert auch bei {Binding}.Go To Definition (F12) also works with {Binding}. Alternativ können Sie das Dialogfeld „Datenbindung“ verwenden.Alternatively, you can use the data binding dialog.