PropertyPath-SyntaxProperty-path syntax

Sie können die PropertyPath-Klasse und die Zeichenfolgensyntax verwenden, um einen PropertyPath-Wert entweder in XAML oder in Code zu instanziieren.You can use the PropertyPath class and the string syntax to instantiate a PropertyPath value either in XAML or in code. PropertyPath-Werte werden von Datenbindungen genutzt.PropertyPath values are used by data binding. Eine ähnliche Syntax kommt für die Ausrichtung von Storyboardanimationen zum Einsatz.A similar syntax is used for targeting storyboarded animations. In beiden Szenarien beschreibt ein Eigenschaftspfad eine Traversierung von einer oder mehreren Objekt-Eigenschaft-Beziehungen, die schließlich in einer einzelnen Eigenschaft aufgelöst werden.For both scenarios, a property path describes a traversal of one or more object-property relationships that eventually resolve to a single property.

Sie können eine Eigenschaftspfad-Zeichenfolge in XAML direkt einem Attribut zuweisen.You can set a property path string directly to an attribute in XAML. Sie haben die Möglichkeit, mit derselben Zeichenfolgensyntax entweder eine PropertyPath-Klasse zu konstruieren, die ein Binding-Objekt im Code festlegt, oder mithilfe der SetTargetProperty-Methode ein Animationsziel im Code zu bestimmen.You can use the same string syntax to construct a PropertyPath that sets a Binding in code, or to set an animation target in code using SetTargetProperty. Es bestehen zwei unterschiedliche Featurebereiche in der Windows-Runtime, die auf einen Eigenschaftspfad zurückgreifen: Datenbindung und Animationsausrichtung.There are two distinct feature areas in the Windows Runtime that use a property path: data binding, and animation targeting. Die Animationsausrichtung generiert keine zugrunde liegenden Property-path-Syntaxwerte in der Windows-Runtime-Implementierung. Sie behält die Informationen als Zeichenfolge bei. Die Konzepte der Objekt-Eigenschaft-Traversierung sind jedoch sehr ähnlich.Animation targeting doesn't create underlying Property-path syntax values in the Windows Runtime implementation, it keeps the info as a string, but the concepts of object-property traversal are very similar. Datenbindung und Animationsausrichtung werten einen Eigenschaftspfad auf leicht unterschiedliche Weise aus, daher behandeln wir die Eigenschaftspfadsyntax dafür getrennt.Data binding and animation targeting each evaluate a property path slightly differently, so we describe property path syntax separately for each.

Eigenschaftspfad für Objekte bei der DatenbindungProperty path for objects in data binding

In der Windows-Runtime können Sie eine Bindung zum Zielwert einer beliebigen Abhängigkeitseigenschaft vornehmen.In Windows Runtime, you can bind to the target value of any dependency property. Der Quelleigenschaftswert für eine Datenbindung muss keine Abhängigkeitseigenschaft sein. Sie kann eine Eigenschaft auf einem Geschäftsobjekt sein (zum Beispiel eine in einer Microsoft .NET-Sprache oder in C++ geschriebene Klasse ).The source property value for a data binding doesn't have to be a dependency property; it can be a property on a business object (for example a class written in a Microsoft .NET language or C++). Das Quellobjekt für den Bindungswert kann auch ein bestehendes Abhängigkeitsobjekt sein, das von der App bereits definiert ist.Or, the source object for the binding value can be an existing dependency object already defined by the app. Die Quelle kann entweder von einem einfachen Eigenschaftennamen oder einer Traversierung der Objekt-Eigenschaft-Beziehungen im Objektgraphen des Geschäftsobjekts referenziert werden.The source can be referenced either by a simple property name, or by a traversal of the object-property relationships in the object graph of the business object.

Sie können eine Bindung zu einem einzelnen Eigenschaftswert oder zu einer solchen Zieleigenschaft vornehmen, die Listen oder Sammlungen enthält.You can bind to an individual property value, or you can bind to a target property that holds lists or collections. Wenn es sich bei der Quelle um eine Sammlung handelt oder der Pfad eine Sammlungseigenschaft angibt, gleicht das Datenbindungsmodul die Sammelelemente der Quelle mit dem Bindungsziel ab. Dies kann zum Beispiel bewirken, dass ein ListBox-Objekt mit einer Liste von Elementen von einer Datenquellensammlung gefüllt wird, ohne dass die spezifischen Elemente in der Sammlung erwartet werden müssen.If your source is a collection, or if the path specifies a collection property, the data-binding engine matches the collection items of the source to the binding target, resulting in behavior such as populating a ListBox with a list of items from a data source collection without needing to anticipate the specific items in that collection.

Traversieren eines ObjektgraphenTraversing an object graph

Das Element der Syntax, das die Traversierung einer Objekt-Eigenschaft-Beziehung in einem Objektgraphen kennzeichnet, ist das Punktzeichen (.).The element of the syntax that denotes the traversal of an object-property relationship in an object graph is the dot (.) character. Jeder Punkt in einer Eigenschaftspfad-Zeichenfolge gibt eine Trennung zwischen einem Objekt (auf der linken Seite des Punkts) und einer Eigenschaft dieses Objekts (auf der rechten Seite des Punkts) an.Each dot in a property path string indicates a division between an object (left side of the dot) and a property of that object (right side of the dot). Die Zeichenfolge wird von links nach rechts ausgewertet, was ermöglicht, mehrere Objekt-Eigenschaft-Beziehungen zu durchlaufen.The string is evaluated left-to-right, which enables stepping through multiple object-property relationships. Betrachten wir dazu ein Beispiel:Let's look at an example:

"{Binding Path=Customer.Address.StreetAddress1}"

Dieser Pfad wird wie folgt ausgewertet:Here's how this path is evaluated:

  1. Das Datenkontextobjekt (oder eine mit derselben Binding-Klasse angegebene Source-Eigenschaft) wird nach einer Eigenschaft namens „Customer“ durchsucht.The data context object (or a Source specified by the same Binding) is searched for a property named "Customer".
  2. Das Objekt, das den Wert der „Customer“-Eigenschaft darstellt, wird nach einer Eigenschaft namens „Address“ durchsucht.The object that is the value of the "Customer" property is searched for a property named "Address".
  3. Das Objekt, das den Wert der „Customer“-Eigenschaft darstellt, wird nach einer Eigenschaft namens „StreetAddress1“ durchsucht.The object that is the value of the "Address" property is searched for a property named "StreetAddress1".

Bei jedem dieser Schritte wird der Wert als Objekt behandelt.At each of these steps, the value is treated as an object. Der Typ des Ergebnisses wird nur dann überprüft, wenn die Bindung auf eine bestimmte Eigenschaft angewendet wird.The type of the result is checked only when the binding is applied to a specific property. Dieses Beispiel würde nicht funktionieren, wenn es sich bei „Address“ nur um einen Zeichenfolgenwert handeln würde, der nicht klarstellt, bei welchem Teil der Zeichenfolge es sich um die Straßenadresse handelt.This example would fail if "Address" were just a string value that didn't expose what part of the string was the street address. In der Regel verweist die Bindung auf bestimmte geschachtelte Eigenschaftswerte eines Geschäftsobjekts, das eine bekannte und zweckmäßige Informationsstruktur aufweist.Typically, the binding is pointing to the specific nested property values of a business object that has a known and deliberate information structure.

Regeln für die Eigenschaften in einem Datenbindungs-EigenschaftspfadRules for the properties in a data-binding property path

  • Alle Eigenschaften, die von einem Eigenschaftspfad referenziert werden, müssen im Quellgeschäftsobjekt öffentlich sein.All properties referenced by a property path must be public in the source business object.
  • Die Endeigenschaft (die Eigenschaft, bei der es sich um die letzte ausgewiesene Eigenschaft im Pfad handelt) muss öffentlich und änderbar sein. Es ist nicht möglich, Bindungen zu statischen Werten herzustellen.The end property (the property that is the last named property in the path) must be public and must be mutable – you can't bind to static values.
  • Die Endeigenschaft muss „read/write“ sein, wenn dieser Pfad als Path-Information in einer bidirektionalen Bindung verwendet werden soll.The end property must be read/write if this path is used as the Path information for a two-way binding.

IndexerIndexers

Ein Eigenschaftspfad für Datenbindungen kann Verweise auf indizierte Eigenschaften aufweisen.A property path for data-binding can include references to indexed properties. Das ermöglicht die Bindung an geordnete Listen/Vektoren oder Wörterbücher/Karten.This enables binding to ordered lists/vectors, or to dictionaries/maps. Verwenden Sie eckige Klammern " [ ] ", um eine indizierte Eigenschaft anzugeben.Use square brackets "[]" characters to indicate an indexed property. Diese Klammern können entweder eine ganze Zahl (für eine geordnete Liste) oder eine Zeichenfolge ohne Anführungszeichen (für Wörterbücher) enthalten.The contents of these brackets can be either an integer (for ordered list) or an unquoted string (for dictionaries). Darüber hinaus ist die Bindung an ein Wörterbuch möglich, bei der der Schlüssel eine ganze Zahl ist.You can also bind to a dictionary where the key is an integer. Sie können verschiedene indizierte Eigenschaften im selben Pfad verwenden und die Objekteigenschaft mit einem Punkt abtrennen.You can use different indexed properties in the same path with a dot separating the object-property.

Nehmen wir zum Beispiel ein Geschäftsobjekt, bei dem es eine Liste von „Teams“ gibt (geordnete Liste), von denen jedes ein Wörterbuch von „Players“ aufweist, wobei als Schlüssel für jeden Spieler der Nachname verwendet wird.For example, consider a business object where there is a list of "Teams" (ordered list), each of which has a dictionary of "Players" where each player is keyed by last name. Ein Beispiel für einen Eigenschafts Pfad zu einem bestimmten Player im zweiten Team ist: "Teams [ 1 ] . Players [ Smith ] ".An example property path to a specific player on the second team is: "Teams[1].Players[Smith]". (Sie verwenden 1, um das zweite Element in „Teams“ anzugeben, da die Liste nullindiziert ist.)(You use 1 to indicate the second item in "Teams" because the list is zero-indexed.)

Hinweis    Die Indizierungs Unterstützung für C++-Datenquellen ist begrenzt. Ausführliche Informationen finden Sie unter Datenbindung.Note  Indexing support for C++ data sources is limited; see Data binding in depth.

Angefügte EigenschaftenAttached properties

Eigenschaftspfade können Verweise auf angefügte Eigenschaften enthalten.Property paths can include references to attached properties. Da der Bezeichnername einer angefügten Eigenschaft bereits einen Punkt enthält, muss ein Name für die angefügte Eigenschaft in runden Klammern hinzugefügt werden, damit der Punkt nicht als Objekteigenschaftsschritt interpretiert wird.Because the identifying name of an attached property already includes a dot, you must enclose any attached property name within parentheses so that the dot isn't treated as an object-property step. Wenn Sie beispielsweise Canvas.ZIndex als Bindungspfad verwenden möchten, lautet die korrekte Zeichenfolge „(Canvas.ZIndex)“.For example, the string to specify that you want to use Canvas.ZIndex as a binding path is "(Canvas.ZIndex)". Weitere Informationen zu angefügten Eigenschaften finden Sie unter Übersicht über angefügte Eigenschaften.For more info on attached properties see Attached properties overview.

Zusammenführen der EigenschaftspfadsyntaxCombining property path syntax

Sie können verschiedene Elemente der Eigenschaftspfadsyntax in einer einzelnen Zeichenfolge zusammenführen.You can combine various elements of property path syntax in a single string. Beispielsweise können Sie einen Eigenschaftspfad definieren, der eine indizierte angefügte Eigenschaft referenziert, sofern Ihre Datenquelle eine solche Eigenschaft aufweist.For example, you can define a property path that references an indexed attached property, if your data source had such a property.

Debuggen eines BindungseigenschaftspfadsDebugging a binding property path

Da ein Eigenschaftspfad von einem Bindungsmodul interpretiert wird und auf Informationen basiert, die möglicherweise nur während der Laufzeit verfügbar sind, müssen Sie einen Eigenschaftspfad für Bindungen oft debuggen, ohne dass Ihnen die gewöhnliche Entwurfszeit- oder Kompilierungszeitunterstützung in den Entwicklungstools zur Verfügung steht.Because a property path is interpreted by a binding engine and relies on info that may be present only at run-time, you must often debug a property path for binding without being able to rely on conventional design-time or compile-time support in the development tools. In vielen Fällen ist das Laufzeitergebnis bei einer fehlgeschlagenen Auflösung eines Eigenschaftspfads ein leerer Wert ohne Fehler, da es sich dabei um das Standardausweichverhalten bei der Auflösung von Bindungen handelt.In many cases the run-time result of failing to resolve a property path is a blank value with no error, because that is the by-design fallback behavior of binding resolution. Glücklicherweise bietet Microsoft Visual Studio einen Debugausgabemodus, der den Teil eines Eigenschaftspfads isoliert, der eine Bindungsquelle angibt, die nicht aufgelöst werden konnte.Fortunately, Microsoft Visual Studio provides a debug output mode that can isolate which part of a property path that's specifying a binding source failed to resolve. Weitere Informationen zur Verwendung dieses Entwicklungstoolfeatures finden Sie im Abschnitt „Debuggen“ im Thema „Datenbindung im Detail“.For more info on using this development tool feature, see "Debugging" section of Data binding in depth.

Eigenschaftspfad für die AnimationsausrichtungProperty path for animation targeting

Animationen stützen sich auf die Ausrichtung auf eine Abhängigkeitseigenschaft, wobei Storyboardwerte angewendet werden, wenn die Animation läuft.Animations rely on targeting a dependency property where storyboarded values are applied when the animation runs. Die Animation ermittelt ein Element anhand des Namens (x:Name-Attribut), um das Objekt mit der zu animierenden Eigenschaft zu identifizieren.To identify the object where the property to be animated exists, the animation targets an element by name (x:Name attribute). Oft ist es erforderlich, einen Eigenschaftspfad zu definieren, der mit dem Objekt beginnt, das als der Storyboard.TargetName bezeichnet wird, und mit dem speziellen Abhängigkeitseigenschaftswert endet, bei dem die Animation angewendet werden soll.It is often necessary to define a property path that starts with the object identified as the Storyboard.TargetName, and ends with the particular dependency property value where the animation should apply. Dieser Eigenschaftspfad wird als Wert für Storyboard.TargetProperty verwendet.That property path is used as the value for Storyboard.TargetProperty.

Weitere Informationen zum Definieren von Animationen in XAML finden Sie unter Storyboardanimationen.For more info on the how to define animations in XAML, see Storyboarded animations.

Einfache AusrichtungSimple targeting

Wenn Sie eine Eigenschaft animieren, die auf dem Zielobjekt selbst existiert, und es möglich ist, eine Animation direkt auf den Typ dieser Eigenschaft anzuwenden (statt auf eine Untereigenschaft des Werts einer Eigenschaft), können Sie die zu animierende Eigenschaft einfach benennen. Es müssen keine weiteren Bedingungen erfüllt sein.If you are animating a property that exists on the targeted object itself, and that property's type can have an animation applied directly to it (rather than to a sub-property of a property's value) then you can simply name the property being animated without any further qualification. Wenn Sie zum Beispiel eine Ausrichtung auf eine Shape-Unterklasse wie Rectangle vornehmen und eine animierte Color-Struktur auf die Fill-Eigenschaft anwenden, kann der Eigenschaftspfad „Fill“ sein.For example, if you are targeting a Shape subclass such as Rectangle, and you are applying an animated Color to the Fill property, your property path can be "Fill".

Indirekte EigenschaftsausrichtungIndirect property targeting

Sie können eine Eigenschaft animieren, bei der es sich um eine Untereigenschaft des Zielobjekts handelt.You can animate a property that is a sub-property of the target object. Anders ausgedrückt: Wenn das Zielobjekt über eine Eigenschaft verfügt, bei der es sich ebenfalls um ein Objekt handelt, und dieses Objekt Eigenschaften aufweist, müssen Sie einen Eigenschaftspfad definieren, der klarstellt, wie diese Objekt-Eigenschaft-Beziehung durchlaufen werden soll.In other words, if there's a property of the target object that's an object itself, and that object has properties, you must define a property path that explains how to step through that object-property relationship. Wenn Sie ein Objekt angeben, bei dem Sie eine Untereigenschaft animieren möchten, fügen Sie den Eigenschaftennamen in runden Klammern an. Die Eigenschaft geben Sie im Format Typname.Eigenschaftsname ein.Whenever you are specifying an object where you want to animate a sub-property, you enclose the property name in parentheses, and you specify the property in typename.propertyname format. Um beispielsweise anzugeben, dass Sie den Objektwert einer RenderTransform-Eigenschaft eines Zielobjekts abrufen möchten, legen Sie „(UIElement.RenderTransform)“ als ersten Schritt im Eigenschaftspfad fest.For example, to specify that you want the object value of a target object's RenderTransform property, you specify "(UIElement.RenderTransform)" as the first step in the property path. Dabei handelt es sich noch nicht um einen vollständigen Pfad, da es keine Animationen gibt, die sich direkt auf einen Transform-Wert anwenden lassen.This isn't yet a complete path, because there are no animations that can apply to a Transform value directly. In diesem Beispiel müssen Sie den Eigenschaftspfad nun vervollständigen. Bei der Endeigenschaft handelt es sich somit um eine Eigenschaft einer Transform-Unterklasse, die von einem Double-Wert animiert werden kann: „(UIElement.RenderTransform).(CompositeTransform.TranslateX)“So for this example, you now complete the property path so that the end property is a property of a Transform subclass that can be animated by a Double value: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Angeben eines bestimmten untergeordneten Elements in einer SammlungSpecifying a particular child in a collection

Sie können einen numerischen Indexer dazu verwenden, ein untergeordnetes Element in einer Sammlungseigenschaft anzugeben.To specify a child item in a collection property, you can use a numeric indexer. Verwenden Sie eckige Klammern (" [ ] ") um den ganzzahligen Indexwert.Use square brackets "[]" characters around the integer index value. Sie können nur geordnete Listen aber keine Wörterbücher referenzieren.You can reference only ordered lists, not dictionaries. Da es sich bei einer Sammlung nicht um einen Wert handelt, der animiert werden kann, kann eine Indexerverwendung nie die Endeigenschaft in einem Eigenschaftspfad sein.Because a collection isn't a value that can be animated, an indexer usage can never be the end property in a property path.

Um z. b. anzugeben, dass Sie die erste Farb Ende Farbe in einem LinearGradientBrush animieren möchten, der auf die Hintergrund Eigenschaft eines Steuer Elements angewendet wird, ist dies der Eigenschafts Pfad: "(Control. Background). (GradientBrush. GradientStops) [ 0 ] . ( Gradienthalte. Color) ".For example, to specify that you want to animate the first color stop color in a LinearGradientBrush that is applied to a control's Background property, this is the property path: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Achten Sie darauf, dass der Indexer nicht der letzte Schritt im Pfad ist und dass vor allem der letzte Schritt die GradientStop.Color-Eigenschaft des Elements 0 in der Sammlung referenzieren muss, um einen animierten Color-Wert darauf anzuwenden.Note how the indexer is not the last step in the path, and that the last step particularly must reference the GradientStop.Color property of item 0 in the collection to apply a Color animated value to it.

Animieren einer angefügten EigenschaftAnimating an attached property

Wenn auch dies selten vorkommt, kann eine angefügte Eigenschaft animiert werden, sofern die angefügte Eigenschaft einen Eigenschaftswert aufweist, der mit einem Animationstyp übereinstimmt.It isn't a common scenario, but it is possible to animate an attached property, so long as that attached property has a property value that matches an animation type. Da der Bezeichnername einer angefügten Eigenschaft bereits einen Punkt enthält, muss ein Name für die angefügte Eigenschaft in runden Klammern hinzugefügt werden, damit der Punkt nicht als Objekteigenschaftsschritt interpretiert wird.Because the identifying name of an attached property already includes a dot, you must enclose any attached property name within parentheses so that the dot isn't treated as an object-property step. Verwenden Sie beispielsweise für die Zeichenfolge, die zum Animieren der angefügten Grid.Row-Eigenschaft auf einem Objekt angegeben werden muss, den Eigenschaftspfad „(Grid.Row)“.For example, the string to specify that you want to animate the Grid.Row attached property on an object, use the property path "(Grid.Row)".

Hinweis    In diesem Beispiel ist der Wert von Grid. Row ein Int32 -Eigenschaftentyp.Note  For this example, the value of Grid.Row is an Int32 property type. Daher ist die Animation mit einer Double-Animation nicht möglich.so you can't animate it with a Double animation. Definieren Sie stattdessen eine ObjectAnimationUsingKeyFrames-Klasse, die über DiscreteObjectKeyFrame-Komponenten verfügt, wobei ObjectKeyFrame.Value auf eine ganze Zahl wie „0“ oder „1“ festgelegt wird.Instead, you'd define an ObjectAnimationUsingKeyFrames that has DiscreteObjectKeyFrame components, where the ObjectKeyFrame.Value is set to an integer such as "0" or "1".

Regeln für die Eigenschaften in einem Animationsausrichtungs-EigenschaftspfadRules for the properties in an animation targeting property path

  • Der angenommene Anfangspunkt des Eigenschaftspfads ist das Objekt, das von einem Storyboard.TargetName bezeichnet wird.The assumed starting point of the property path is the object identified by a Storyboard.TargetName.
  • Alle über den Eigenschaftspfad hinweg referenzierten Objekte und Eigenschaften müssen öffentlich sein.All objects and properties referenced along the property path must be public.
  • Die Endeigenschaft (die Eigenschaft, bei der es sich um die letzte ausgewiesene Eigenschaft im Pfad handelt) muss öffentlich, les- und schreibbar und eine Abhängigkeitseigenschaft sein.The end property (the property that is the last named property in the path) must be public, be read-write, and be a dependency property.
  • Die Endeigenschaft muss zudem über einen Eigenschaftstyp verfügen, der von einer der breitgefächerten Klassen von Animationstypen animiert werden kann (Color-Animationen, Double-Animationen, Point-Animationen, ObjectAnimationUsingKeyFrames).The end property must have a property type that is able to be animated by one of the broad classes of animation types (Color animations, Double animations, Point animations, ObjectAnimationUsingKeyFrames).

Die PropertyPath-KlasseThe PropertyPath class

Die PropertyPath-Klasse ist der zugrundeliegende Eigenschaftstyp der Binding.Path-Eigenschaft für das Bindungsszenario.The PropertyPath class is the underlying property type of Binding.Path for the binding scenario.

Meistens ist es in XAML möglich, eine PropertyPath-Klasse ohne jeglichen Code anzuwenden.Most of the time, you can apply a PropertyPath in XAML without using any code at all. In einigen Fällen ist es jedoch sinnvoll, ein PropertyPath-Objekt mithilfe von Code zu definieren und dieses zur Laufzeit einer Eigenschaft zuzuordnen.But in some cases you may want to define a PropertyPath object using code and assign it to a property at run-time.

PropertyPath verfügt über einen PropertyPath(String)-Konstruktor und hat keinen Standardkonstruktor.PropertyPath has a PropertyPath(String) constructor, and doesn't have a default constructor. Die Zeichenfolge, die Sie diesem Konstruktor übergeben, wird mithilfe der zuvor beschriebenen Eigenschaftspfadsyntax definiert.The string you pass to this constructor is a string that's defined using the property path syntax as we explained earlier. Dies ist dieselbe Zeichenfolge, mit der Sie Path als XAML-Attribut zuweisen können.This is also the same string you'd use to assign Path as a XAML attribute. Die einzige andere API der PropertyPath-Klasse ist die schreibgeschützte Path-Eigenschaft.The only other API of the PropertyPath class is the Path property, which is read-only. Sie können diese Eigenschaft als Konstruktionszeichenfolge für eine andere PropertyPath-Instanz verwenden.You could use this property as the construction string for another PropertyPath instance.