2009-09-07 42 views
7

Tôi có một Property trong App.xaml.cs của mình được gọi là User chứa chi tiết Người dùng. Tôi đã đọc here rằng bạn không thể có thuộc tính phụ thuộc trên lớp Ứng dụng.Liên kết với Thuộc tính trong App.xaml.cs

Tôi đã chọn sử dụng App.cs vì nó là toàn cầu cho toàn bộ chương trình và được sử dụng để kiểm soát truy cập, nhưng mọi lựa chọn thay thế đều được chào đón.

Bây giờ câu hỏi của tôi là làm thế nào tôi có thể liên kết với thuộc tính này từ UserControls và Windows của tôi.

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

Điều này rõ ràng chỉ hoạt động trên thuộc tính trên DataContext. Tôi muốn truy cập thuộc tính trên Ứng dụng. Ai đó có thể cho tôi xem ví dụ về ràng buộc đối với thuộc tính App.xaml.cs nếu tôi triển khai INotifyChanged không?

Cảm ơn -Oliver

Trả lời

22

Tôi đã đọc ở đây là bạn không thể có một tài sản phụ thuộc vào lớp App.

Thật vậy, bạn không thể, vì Application không được kế thừa từ DependencyObject. Tuy nhiên, không cần thiết: chỉ mục đích mục tiêu của một ràng buộc cần phải là thuộc tính phụ thuộc.

Nếu bạn muốn liên kết với một tài sản của lớp ứng dụng, bạn có thể làm điều đó như thế:

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

Cảm ơn bạn rất nhiều. Nó hoạt động tuyệt vời. – Oliver

+1

Chỉ cần lưu ý rằng điều này không thể thực hiện được trong Silverlight. x: Tĩnh và x: Loại không tồn tại trong thế giới Silverlight. – Oliver

+0

Hãy nhớ triển khai INotifyPopertyChanged để xem các thay đổi đối với thuộc tính đó được phản ánh trên giao diện người dùng. – sergiol

4

Và để truy cập chương trình khác trong C# bạn có thể làm điều này:

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

Bạn có thể ràng buộc khai báo trong Silverlight để Application.Current bằng cách sử dụng một công cụ chuyển đổi tùy chỉnh.

Xem bài đăng trên blog của tôi here

+0

Liên kết đơn lẻ là [được coi là câu trả lời nghèo] (http://stackoverflow.com/faq#deletion) vì nó vô nghĩa bởi chính nó và tài nguyên đích không được đảm bảo sẽ còn sống trong tương lai. [Nó sẽ là thích hợp hơn] (http://meta.stackexchange.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo. – j0k

Các vấn đề liên quan