Freigeben über


PropertyPath-Syntax

Sie können die PropertyPath-Klasse und die Zeichenfolgensyntax verwenden, um einen PropertyPath-Wert entweder in XAML oder im Code zu instanziieren. PropertyPath-Werte werden von der Datenbindung verwendet. Eine ähnliche Syntax wird für die Ausrichtung von Storyboardanimationen verwendet. In beiden Szenarien beschreibt ein Eigenschaftspfad eine Durchquerung einer oder mehrerer Objekteigenschaftsbeziehungen, die schließlich zu einer einzelnen Eigenschaft aufgelöst werden.

Sie können eine Eigenschaftspfadzeichenfolge direkt auf ein Attribut in XAML festlegen. Sie können dieselbe Zeichenfolgensyntax verwenden, um einen PropertyPath zu erstellen, der eine Bindung im Code festlegt, oder um ein Animationsziel im Code mithilfe von SetTargetProperty festzulegen. Es gibt zwei unterschiedliche Featurebereiche in der Windows-Runtime, die einen Eigenschaftspfad verwenden: Datenbindung und Animationsadressierung. Die Animationsadressierung erstellt in der Windows-Runtime Implementierung keine zugrunde liegenden Eigenschaftspfadsyntaxwerte, sondern behält die Informationen als Zeichenfolge bei, aber die Konzepte der Objekteigenschaftsdurchquerung sind sehr ähnlich. Datenbindung und Animation für jede Bewertung eines Eigenschaftspfads etwas anders, daher beschreiben wir die Eigenschaftspfadsyntax separat für jeden.

Eigenschaftspfad für Objekte in der Datenbindung

In Windows-Runtime können Sie eine Bindung an den Zielwert einer beliebigen Abhängigkeitseigenschaft vornehmen. Der Quelleigenschaftswert für eine Datenbindung muss keine Abhängigkeitseigenschaft sein. es kann sich um eine Eigenschaft für ein Geschäftsobjekt handeln (z. B. eine Klasse, die in einer Microsoft .NET-Sprache oder C++ geschrieben wurde). Oder das Quellobjekt für den Bindungswert kann ein vorhandenes Abhängigkeitsobjekt sein, das bereits von der App definiert wurde. Auf die Quelle kann entweder durch einen einfachen Eigenschaftsnamen oder durch eine Durchquerung der Objekteigenschaftsbeziehungen im Objektdiagramm des Geschäftsobjekts verwiesen werden.

Sie können eine Bindung an einen einzelnen Eigenschaftswert vornehmen oder eine Bindung an eine Zieleigenschaft vornehmen, die Listen oder Auflistungen enthält. Wenn es sich bei der Quelle um eine Auflistung handelt oder wenn der Pfad eine Sammlungseigenschaft angibt, stimmt das Datenbindungsmodul mit den Sammlungselementen der Quelle mit dem Bindungsziel überein, was zu einem Verhalten führt, z. B. das Auffüllen eines ListBox-Steuerelements mit einer Liste von Elementen aus einer Datenquellensammlung, ohne die spezifischen Elemente in dieser Auflistung antizipieren zu müssen.

Durchlaufen eines Objektdiagramms

Das Element der Syntax, das die Durchquerung einer Objekteigenschaftsbeziehung in einem Objektdiagramm angibt, ist das Punktzeichen (.). Jeder Punkt in einer Eigenschaftspfadzeichenfolge gibt eine Division zwischen einem Objekt (links neben dem Punkt) und einer Eigenschaft dieses Objekts (rechts neben dem Punkt) an. Die Zeichenfolge wird von links nach rechts ausgewertet, wodurch mehrere Objekteigenschaftsbeziehungen durchlaufen werden können. Betrachten wir dazu ein Beispiel:

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

Hier erfahren Sie, wie dieser Pfad ausgewertet wird:

  1. Das Datenkontextobjekt (oder eine durch dieselbe Bindung angegebene Quelle) wird nach einer Eigenschaft namens "Customer" gesucht.
  2. Das Objekt, das der Wert der Eigenschaft "Customer" ist, wird nach einer Eigenschaft mit dem Namen "Address" gesucht.
  3. Das Objekt, das der Wert der "Address"-Eigenschaft ist, wird nach einer Eigenschaft namens "StreetAddress1" gesucht.

Bei jedem dieser Schritte wird der Wert als Objekt behandelt. Der Typ des Ergebnisses wird nur überprüft, wenn die Bindung auf eine bestimmte Eigenschaft angewendet wird. In diesem Beispiel würde ein Fehler auftreten, wenn "Address" nur ein Zeichenfolgenwert wäre, der nicht verfügbar gemacht hat, welcher Teil der Zeichenfolge die Straßenadresse war. In der Regel verweist die Bindung auf die spezifischen geschachtelten Eigenschaftswerte eines Geschäftsobjekts, das eine bekannte und bewusste Informationsstruktur aufweist.

Regeln für die Eigenschaften in einem Datenbindungseigenschaftspfad

  • Alle Eigenschaften, auf die von einem Eigenschaftspfad verwiesen wird, müssen im Quellgeschäftsobjekt öffentlich sein.
  • Die Endeigenschaft (die Eigenschaft, die die letzte benannte Eigenschaft im Pfad ist) muss öffentlich sein und änderbar sein – Sie können keine Bindung an statische Werte erstellen.
  • Die Endeigenschaft muss lese-/schreibgeschützt sein, wenn dieser Pfad als Pfadinformationen für eine bidirektionale Bindung verwendet wird.

Indexer

Ein Eigenschaftspfad für die Datenbindung kann Verweise auf indizierte Eigenschaften enthalten. Dies ermöglicht die Bindung an sortierte Listen/Vektoren oder Wörterbücher/Karten. Verwenden Sie eckige Klammern "[]"-Zeichen, um eine indizierte Eigenschaft anzugeben. Der Inhalt dieser Klammern kann entweder eine ganze Zahl (für sortierte Liste) oder eine nicht angehaltene Zeichenfolge (für Wörterbücher) sein. Sie können auch eine Bindung an ein Wörterbuch erstellen, bei dem der Schlüssel eine ganze Zahl ist. Sie können unterschiedliche indizierte Eigenschaften im selben Pfad verwenden, wobei ein Punkt die Objekteigenschaft trennt.

Betrachten Sie z. B. ein Geschäftsobjekt, in dem eine Liste von "Teams" (sortierte Liste) vorhanden ist, von denen jeder Spieler über ein Wörterbuch mit "Players" verfügt, bei dem jeder Spieler nach dem Nachnamen schlüsselt. Ein Beispiel für einen Eigenschaftspfad zu einem bestimmten Spieler im zweiten Team ist: "Teams[1]. Spieler[Smith]". (Sie verwenden 1, um das zweite Element in "Teams" anzugeben, da die Liste nullindiziert ist.)

Hinweis: Die Indizierungsunterstützung für C++-Datenquellen ist eingeschränkt. Ausführliche Informationen finden Sie unter "Datenbindung".

Angefügte Eigenschaften

Eigenschaftspfade können Verweise auf angefügte Eigenschaften enthalten. Da der identifizierende Name einer angefügten Eigenschaft bereits einen Punkt enthält, müssen Sie alle angefügten Eigenschaftennamen in Klammern einschließen, damit der Punkt nicht als Objekteigenschaftsschritt behandelt wird. Die Zeichenfolge zum Angeben, dass Sie Canvas.ZIndex als Bindungspfad verwenden möchten, lautet beispielsweise "(Canvas.ZIndex)". Weitere Informationen zu angefügten Eigenschaften finden Sie in der Übersicht über angefügte Eigenschaften.

Kombinieren der Eigenschaftspfadsyntax

Sie können verschiedene Elemente der Eigenschaftspfadsyntax in einer einzelnen Zeichenfolge kombinieren. Sie können z. B. einen Eigenschaftspfad definieren, der auf eine indizierte angefügte Eigenschaft verweist, wenn die Datenquelle eine solche Eigenschaft aufweist.

Debuggen eines Bindungseigenschaftspfads

Da ein Eigenschaftspfad von einem Bindungsmodul interpretiert wird und auf Informationen basiert, die nur zur Laufzeit vorhanden sein können, müssen Sie häufig einen Eigenschaftspfad für die Bindung debuggen, ohne sich auf herkömmliche Entwurfszeit- oder Kompilierungszeitunterstützung in den Entwicklungstools verlassen zu müssen. In vielen Fällen ist das Laufzeitergebnis, bei dem ein Eigenschaftspfad nicht aufgelöst werden kann, ein leerer Wert ohne Fehler, da dies das standardmäßige Fallbackverhalten der Bindungsauflösung ist. Glücklicherweise stellt Microsoft Visual Studio einen Debugausgabemodus bereit, der isolieren kann, welcher Teil eines Eigenschaftspfads, der eine Bindungsquelle angibt, nicht aufgelöst werden konnte. Weitere Informationen zur Verwendung dieses Entwicklungstools-Features finden Sie im Abschnitt "Debuggen" der Datenbindung im Detail.

Eigenschaftspfad für Animationsadressierung

Animationen basieren auf der Ausrichtung auf eine Abhängigkeitseigenschaft, bei der Storyboardwerte angewendet werden, wenn die Animation ausgeführt wird. Um das Objekt zu identifizieren, in dem die zu animierende Eigenschaft vorhanden ist, zielt die Animation auf ein Element anhand des Namens (x:Name-Attribut) ab. Es ist häufig erforderlich, einen Eigenschaftspfad zu definieren, der mit dem als Storyboard.TargetName identifizierten Objekt beginnt und mit dem bestimmten Abhängigkeitseigenschaftswert endet, in dem die Animation angewendet werden soll. Dieser Eigenschaftspfad wird als Wert für Storyboard.TargetProperty verwendet.

Weitere Informationen zum Definieren von Animationen in XAML finden Sie unter Storyboardanimationen.

Einfache Zielbestimmung

Wenn Sie eine Eigenschaft animieren, die für das zielbezogene Objekt selbst vorhanden ist, und der Typ dieser Eigenschaft eine Animation direkt darauf anwenden kann (anstatt auf eine Untereigenschaft des Werts einer Eigenschaft), können Sie einfach die Eigenschaft benennen, die ohne weitere Qualifizierung animiert wird. Wenn Sie beispielsweise auf eine Shape-Unterklasse wie "Rectangle" abzielen und eine animierte Farbe auf die Fill-Eigenschaft anwenden, kann ihr Eigenschaftspfad "Fill" lauten.

Indirekte Eigenschaftsadressierung

Sie können eine Eigenschaft animieren, die eine Untereigenschaft des Zielobjekts ist. Anders ausgedrückt: Wenn es eine Eigenschaft des Zielobjekts gibt, das ein Objekt selbst ist und dieses Objekt Eigenschaften aufweist, müssen Sie einen Eigenschaftspfad definieren, der erläutert, wie Sie diese Objekteigenschaftsbeziehung schrittweise durchlaufen. Wenn Sie ein Objekt angeben, in dem Sie eine Untereigenschaft animieren möchten, schließen Sie den Eigenschaftsnamen in Klammern ein, und geben Sie die Eigenschaft im Typnamen an.propertyname format. Wenn Sie beispielsweise angeben möchten, dass der Objektwert der RenderTransform-Eigenschaft eines Zielobjekts angegeben werden soll, geben Sie "(UIElement.RenderTransform)" als ersten Schritt im Eigenschaftspfad an. Dies ist noch kein vollständiger Pfad, da es keine Animationen gibt, die direkt auf einen Transform-Wert angewendet werden können. Für dieses Beispiel schließen Sie nun den Eigenschaftspfad ab, sodass die Endeigenschaft eine Eigenschaft einer Transform-Unterklasse ist, die durch einen Double-Wert animiert werden kann: "(UIElement.RenderTransform).( CompositeTransform.TranslateX)"

Angeben eines bestimmten untergeordneten Elements in einer Auflistung

Um ein untergeordnetes Element in einer Auflistungseigenschaft anzugeben, können Sie einen numerischen Indexer verwenden. Verwenden Sie eckige Klammern "[]"-Zeichen um den ganzzahligen Indexwert. Sie können nur sortierte Listen und keine Wörterbücher referenzieren. Da eine Auflistung kein Wert ist, der animiert werden kann, kann eine Indexerverwendung niemals die Endeigenschaft in einem Eigenschaftspfad sein.

Wenn Sie beispielsweise angeben möchten, dass Sie die erste Farbstoppfarbe in einem LinearGradientBrush animieren möchten, der auf die Background-Eigenschaft eines Steuerelements angewendet wird, ist dies der Eigenschaftspfad: "(Control.Background).( GradientBrush.GradientStops)[0]. (GradientStop.Color)". Beachten Sie, dass der Indexer nicht der letzte Schritt im Pfad ist und dass der letzte Schritt insbesondere auf die GradientStop.Color-Eigenschaft von Element 0 in der Auflistung verweisen muss, um einen farbanimierten Wert darauf anzuwenden.

Animieren einer angefügten Eigenschaft

Es ist kein gängiges Szenario, aber es ist möglich, eine angefügte Eigenschaft zu animieren, solange diese angefügte Eigenschaft einen Eigenschaftswert aufweist, der einem Animationstyp entspricht. Da der identifizierende Name einer angefügten Eigenschaft bereits einen Punkt enthält, müssen Sie alle angefügten Eigenschaftennamen in Klammern einschließen, damit der Punkt nicht als Objekteigenschaftsschritt behandelt wird. Verwenden Sie beispielsweise den Eigenschaftspfad "(Grid.Row)", um anzugeben, dass Sie die angefügte Grid.Row-Eigenschaft für ein Objekt animieren möchten.

Hinweis Für dieses Beispiel ist der Wert von Grid.Row ein Int32-Eigenschaftstyp . Daher können Sie sie nicht mit einer Doppelanimation animieren. Stattdessen definieren Sie einen ObjectAnimationUsingKeyFrames mit DiskretObjectKeyFrame-Komponenten, wobei der ObjectKeyFrame.Value auf eine ganze Zahl wie "0" oder "1" festgelegt ist.

Regeln für die Eigenschaften in einem Animationszieleigenschaftenpfad

  • Der angenommene Ausgangspunkt des Eigenschaftspfads ist das objekt, das durch ein Storyboard.TargetName identifiziert wird.
  • Alle Objekte und Eigenschaften, auf die entlang des Eigenschaftspfads verwiesen wird, müssen öffentlich sein.
  • Die Endeigenschaft (die Eigenschaft, die die letzte benannte Eigenschaft im Pfad ist) muss öffentlich sein, schreibgeschützt sein und eine Abhängigkeitseigenschaft sein.
  • Die Endeigenschaft muss über einen Eigenschaftstyp verfügen, der von einer der breiten Animationsklassen animiert werden kann (Farbanimationen, Doppelanimationen, PointanimationUsingKeyFrames).

Die PropertyPath-Klasse

Die PropertyPath-Klasse ist der zugrunde liegende Eigenschaftstyp "Binding.Path" für das Bindungsszenario.

Meistens können Sie einen PropertyPath in XAML anwenden, ohne überhaupt Code zu verwenden. In einigen Fällen können Sie jedoch ein PropertyPath-Objekt mithilfe von Code definieren und einer Eigenschaft zur Laufzeit zuweisen.

PropertyPath verfügt über einen PropertyPath(String)-Konstruktor und verfügt nicht über einen Standardkonstruktor. Die an diesen Konstruktor übergebene Zeichenfolge ist eine Zeichenfolge, die mithilfe der Eigenschaftspfadsyntax definiert ist, wie zuvor erläutert. Dies ist auch die gleiche Zeichenfolge, die Sie zum Zuweisen von Path als XAML-Attribut verwenden. Die einzige andere API der PropertyPath-Klasse ist die Path-Eigenschaft, die schreibgeschützt ist. Sie können diese Eigenschaft als Konstruktionszeichenfolge für eine andere PropertyPath-Instanz verwenden.