我需要有人确认我之前看到的内容,因为这个问题我可能会更改应用程序的域名。问题是,当对相互继承的接口进行数据绑定时,您无法在基接口上看到属性。
我正在使用数据绑定的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上,因为当我进行另一个具体的实现时,我将不得不重复代码。
我需要知道的是,这是否真的无效。如果你知道为什么,这将是一个奖金。
谢谢 贝
答案 0 :(得分:1)
以下是MSDN上发布的有关为什么不起作用的内容的嗤之以鼻。写这篇文章的海报是“邮资”。
不,它不可能绑定到接口! BindingSource提供了一些使用类型作为数据源的帮助。在内部,它将实例化BindingList<>实例使用类型信息。此外,添加新项目也可以,但AddNew()将失败,除非您订阅了AddingNew事件。