2009-09-07 20 views
7

Ich habe eine Property in meiner App.xaml.cs User genannt, die die Benutzerdetails enthält. Ich habe here gelesen, dass Sie keine Abhängigkeitseigenschaft in der App-Klasse haben können.An Eigenschaft in App.xaml.cs binden

Ich entschied mich App.cs zu verwenden, da es für das gesamte Programm global ist und dies für die Zugriffskontrolle verwendet wird, aber alle Alternativen sind willkommen.

Jetzt ist meine Frage, wie kann ich diese Eigenschaft von meinen Benutzersteuerelementen und Windows binden.

IsEnabled="{Binding Path=User, Converter={StaticResource hasAccessConverter}, ConverterParameter=Mid}" 

Dies funktioniert natürlich nur auf einem Grundstück am DataContext. Ich möchte auf die Eigenschaft in der App zugreifen. Kann mir jemand ein Beispiel für die Bindung an die App.xaml.cs-Eigenschaft zeigen, wenn ich INotifyChanged implementiere?

Dank -Oliver

Antwort

22

Ich habe hier gelesen, dass Sie keine Abhängigkeitseigenschaft auf der App-Klasse haben kann.

der Tat kann man nicht, weil Application erbt nicht von DependencyObject. Es ist jedoch nicht notwendig: Nur die Ziel Eigenschaft einer Bindung muss eine Abhängigkeitseigenschaft sein.

Wenn Sie auf eine Eigenschaft Ihrer App Klasse binden möchten, können Sie es so tun:

IsEnabled="{Binding Path=User, Source={x:Static Application.Current}}" 
+0

Vielen Dank. Es funktioniert großartig. – Oliver

+1

Nur ein Hinweis, dass dies in Silverlight nicht möglich ist. x: Static und x: Type existieren in der Silverlight-Welt nicht. – Oliver

+0

Denken Sie daran, INotifyPopertyChanged zu implementieren, um die Änderungen an dieser Eigenschaft auf der Benutzeroberfläche anzuzeigen. – sergiol

4

Und darauf zugreifen programmatisch in C#, dies zu tun:

((App)Application.Current).YourMethod 
((App)Application.Current).YourProperty 
0

Sie können deklarativ in Silverlight an Application.Current binden, indem Sie einen benutzerdefinierten Konverter verwenden.

Siehe meinen Blogpost here

+0

Lone Link ist eine [schlechte Antwort] (http://stackoverflow.com/faq#deletion), da sie von sich aus bedeutungslos ist und die Zielressource nicht garantiert ist, in der Zukunft am Leben zu sein. [Es wäre besser] (http://meta.stackexchange.com/q/8259), hier die wesentlichen Teile der Antwort anzugeben und den Link als Referenz anzugeben. – j0k

Verwandte Themen