2010-02-26 53 views
3

我需要有人來確認我所看到的,因爲這個問題,我可能會改變應用程序的領域。問題是,當針對彼此繼承的接口進行數據綁定時,您無法看到基礎接口上的屬性。Winforms與接口繼承的數據綁定

我正在使用數據綁定的WinForms應用程序。這是在.net3.5中,不,我不能使用wpf。

總之,我有一個這樣的設置。

public interface IClassOne 
{ 
    string Prop1 { get; set; } 
} 

public interface IClassTwo : IClassOne 
{ 
    string Prop2 { get; set; } 
} 

public abstract class ClassOne : IClassOne 
{ 
    public string Prop1 { get; set; } 
} 

public class ClassTwo : ClassOne, IClassTwo 
{ 
    public string Prop2 { get; set; } 
} 

基類將擁有公共屬性和邏輯。基本接口將具有這些公共屬性,因此它們必須在每個具體實現上實現。

如果我是上面的數據綁定到我的類結構,我會綁定到IClassTwo。問題是當我綁定到IClassTwo時,我無法在WinForms的任何設計器操作中看到Prop1。即使我解決了這個限制並獲得了與Prop1綁定的控制權,但它不起作用。

但是,如果我綁定兩個ClassTwo,那麼數據綁定的作品。

我不想處理具體的類,因爲這會使用模擬和測試太難。我也不想把所有東西放在IClassTwo上,因爲當我做出另一個具體的實現時,我將不得不重複代碼。

我需要知道的是,如果這真的不起作用。如果你知道爲什麼,那將是一個獎金。

謝謝 託尼

回答

1

http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/4151e6b6-44f7-45e2-9a8e-92c4f8539095/?prof=required

這裏是什麼MSDN上公佈,爲什麼這不工作的這段。寫這個的海報是通過「蓋印」進行的。

不,不可能綁定到接口! BindingSource爲使用類型作爲數據源提供了一些幫助。在內部它將使用類型信息實例化一個BindingList實例。也可以添加新項目,但AddNew()將失敗,除非您訂閱AddingNew事件。

+0

該帖子給出的更真實的原因是繼承接口被視爲「明確實施」。這可能更多的是接口支持多繼承,但類不支持。活頁夾願意爲類進行繼承,因爲單一繼承在決定要選擇的基類時消除了任何不明確的地方,但是對於接口來說類似的行爲需要解析重疊的屬性名。 – binki 2017-03-14 21:37:25