StaticExtension Wert nicht aufgelöst werden kann
Ich bin vor einige Probleme mit einer WPF-Bindung an eine statische Eigenschaft. In meiner Anwendung gibt es eine Klasse namens " Globals enthält eine statische Eigenschaft ThisAddIn. Dieses Objekt ermöglicht mir den Zugriff auf eine User-Eigenschaft, die im Grunde ist, was ich verwenden möchte in meine Bindung. So, mein XAML-Code sieht wie folgt aus:
<TextBlock Text="{Binding Path=User.Name
, Source={x:Static Member=s:Globals.ThisAddIn}}" />
Den namespace s ist erklärte an der Oberseite von die folgende Zeile ein:
xmlns:s="clr-namespace:ConsoleApplication16.Model"
Fand ich eine Menge verschiedener Ansätze, wie Sie beziehen sich auf die statische Eigenschaft in XAML, aber keiner von Ihnen arbeitete außer für diese, die auch scheint die logischste für mich. Einige Proben habe ich gefunden, nicht verwenden Pfad oder Mitglied überhaupt.
Nach einigen Tests habe ich den richtigen Weg gefunden, dies zu tun, ist mit "x:Static-Member" um die Klasse zu definieren und die statische Eigenschaft, die Sie verwenden möchten, während der Pfad definiert die richtigen Eigenschaften in diesem Objekt, genauso wie eine normale Bindung tun würde.
Obwohl diese Lösung kompiliert ohne jegliche Beschwerden, eine XAMLParseException öffnet sich direkt mir zu sagen, dass die StaticExtension Wert nicht aufgelöst werden kann, um eine enumeration, statische Feld oder die statische Eigenschaft.
- Wie ist das genau die
right way
wenn es eine exception wirft? - Auch Sie sollten in der Lage sein, um die drop
Path=
undMember=
denn das aufrufen der jeweiligen contructors, die entsprechende Eigenschaften festlegen. - Ich in der Regel binden statische Klassen/Eigenschaften, die mit
{Binding Source={x:Static local:MyStaticClass.SomeStaticProperty.PropertyName}
. Nur sicher sein, Ihre Eigenschaften müssenget
/set
Beisitzer. Zum Beispiel werden Sie sicher, dass Siepublic string PropertyName { get; set; }
stattpublic string PropertyName;
- Das wird sicher nicht funktionieren, da
x:Static
hat eine Feste syntaxns:Class.Property
. - Du hast Recht, ich bin nicht sicher, warum ich die
PropertyName
dort.{Binding PropertyName, Source={x:Static local:MyStaticClass.SomeStaticProperty}
- Was machen die Klassen Aussehen? Der XAML-Code sieht gut aus.
- "keiner von Ihnen arbeitete außer diesem einen Pfad definiert, der die richtigen Eigenschaften in diesem Objekt" -- Sorry, aber das ist Unsinn. StaticExtension nicht über eine Path-Eigenschaft, und verlassen Mitglied= funktioniert, weil dann der Wert, den Sie bieten, ist ein argument für den Konstruktor von StaticExtension, die stellt nur Mitglied, um es. Es hilft, die Dokumentation zu Lesen, anstatt nur versuchen zufällige Dinge. "kompiliert ohne jegliche Beschwerden, eine XAMLParseException erscheint direkt" -- du hast dir selbst widersprochen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gewährleisten
Globals.ThisAddIn
ist öffentlich.Kann man auch bekommen, wenn Sie mit einer Ressource-Datei, in dem Fall müssen Sie außerdem sicherstellen der access-modifier wird festgelegt
Public
:In der Ausgabe-Bibliothek-Projekt, sollten Sie sicherstellen, dass die Ressourcen.resx-Datei-generator wurde geändert, als PublicResXFileCodeGenerator statt ResXFileGodeGenerator standardmäßig.
Ersetzen Sie Folgendes mit...
Diese eine