2010-05-22 45 views
1

我有以下的(C#)代碼WPF/Silverlight的數據綁定接口屬性(隱藏實現)

namespace A 
{ 
    public interface IX { bool Prop { get; set; } } 
    class X : IX { public bool Prop { ... } } // hidden implementation of IX 
} 

namespace B 
{ 
    .. 
    A.IX x = ...; 
    object.DataContext = x; 
    object.SetBinding(SomeDependencyProperty, new Binding("Prop")); 
    .. 
} 

所以我有一個隱藏的實現與屬性「道具」的接口,我需要綁定代碼中的此屬性。

我的問題是,綁定不工作,除非我公開X類。

有沒有辦法解決這個問題?

+0

將實現內部化是否可行? – thomasmartinsen 2010-05-22 14:52:59

+0

默認情況下,類是內部的:http://msdn.microsoft.com/en-us/library/ba0a1yw2%28v=VS.71%29.aspx – ligaz 2010-05-22 16:31:24

回答

1

我相信你在Silverlight中這樣做,因爲綁定到非公共成員是不可能的。但它在WPF中。

因此,對於Silverlight,您應該讓您的課程公開。

+1

是的,這違反了Silverlight的訪問規則。如果用戶可以綁定這些值並設置/獲取它們,那麼阻止私人/受保護/內部反射的重點是什麼? – JustinAngel 2010-05-22 20:52:40

0

使內部實現公共接口的類有一個很好的理由。這實施了基於接口的編程。 .Net是關於接口的,而不是類。經驗法則:當暴露一個接口時,切勿暴露一個具體的非基本類型。

有一種綁定語法,它允許讓XAML編譯器將對象轉換爲接口。在另一篇文章中提到過:

{Binding Path=(mynamespacealias:IMyInterface.MyValue)}