2015-09-29 5 views
6

Bei Verwendung der traditionellen {Binding} -Syntax können Sie den Elementnamen angeben, um auf ein bestimmtes Steuerelement auf der Seite zu verweisen und auf dessen Eigenschaften zugreifen zu können. Zum Beispiel, wenn die Seite mit dem Namen ist page Sie tun können:Alternative zu ElementName in x: Bindung mit DataTemplates

{Binding ElementName=Page, Path=Name} 

Mit der {x:Bind} Syntax sagt es

Mit x: Binden Sie tun müssen, um Elementnamen nicht verwenden = xxx als Teil der bindender Ausdruck. Mit x: Bind können Sie den Namen des Elements als ersten Teil des Pfads für die Bindung verwenden, da die benannten Elemente zu Feldern innerhalb der Seite oder des Benutzersteuerelements werden, das die Stamm- -Bindungsquelle darstellt.

So zum Beispiel oben in {x: Bind} würde

{x:Bind page.Name} 

sein, die gut funktioniert, bis es sich in einer Datenvorlage ist (zum Beispiel ein Listview des ItemTemplate). In diesem Fall ist es nicht mehr funktioniert, wie es für Page auf dem Datentyp festgelegt, die zu dem folgenden Fehler führt (unter der Annahme, meinen Datentypen customer) suchen:

XamlCompiler Fehler WMC1110: Ungültige Bindungspfad ‚Page.Name ': Property ‚: Syntax mit Datatemplates und Zugriffskontrollen außerhalb der Datenvorlage Seite des Kunden

Was ist die Lösung zu verwenden, {x} Bind‘ kann nicht auf Art gefunden werden'?

Beispielcode ist verfügbar here (beachten Sie spezifische Festschreibung)

Antwort

9

Soweit ich zu diesem Zeitpunkt weiß, gibt es keine Möglichkeit, direkt auf eine Eigenschaft eines Steuer bindet mit der x: bind-Methode, wie sie tut unterstützt den Elementnamen nicht innerhalb seiner Bindungsdefinition.

Das bedeutet nicht, dass Sie nicht an ein Steuerelement in einem dataTemplate binden können. Sie können immer noch so etwas tun, um auf Steuerelemente zuzugreifen, aber Sie können die kompilierte bindende x: Bind-Syntax nicht verwenden.

Der Grund für den Fehler, den Sie erhalten, liegt an der Art und Weise, wie Datenvorlagen ihre Datenquelle überlagern. Die Bindung x: Bind kann nicht auf ein Steuerelementobjekt verweisen, und Ihr Kundentyp führt die Eigenschaft Page.Name oder den Pfad aus. Wie oben gezeigt, besteht die einzige Möglichkeit zum Zugriff auf Benutzersteuerungseigenschaften außerhalb Ihrer Steuerelemente nur mit XAML darin, auf den Standardbindungsmechanismus zurückzugreifen.

Ich hoffe, dies beantwortet Ihre Frage.