2010-02-26 29 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