【问题标题】:Winforms databinding with interface inheritance具有接口继承的 Winforms 数据绑定
【发布时间】:2010-03-01 21:19:21
【问题描述】:

我需要有人确认我看到的内容,然后才能因为这个问题而更改应用程序的域。问题是,当对从另一个继承的接口进行数据绑定时,您看不到基本接口上的属性。

我正在开发一个使用数据绑定的 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 上,因为当我进行另一个具体实现时,我必须重复代码。

我需要知道的是这是否真的行不通。如果你知道为什么,那将是一个奖励。

谢谢 托尼

【问题讨论】:

    标签: winforms data-binding interface


    【解决方案1】:

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

    这里是 MSDN 上发布的关于为什么这不起作用的片段。写这篇文章的发帖人写的是“邮资”。

    不,不可能绑定到接口! BindingSource 为将类型用作数据源提供了一些帮助。在内部,它将使用类型信息实例化一个 BindingList 实例。也可以添加新项目,但除非您订阅 AddNew 事件,否则 AddNew() 将失败。

    【讨论】:

    • 那篇文章给出的更真实的原因是继承的接口被视为“显式实现”。这可能更多地与接口支持多重继承但类不支持这一事实有关。 binder 愿意为类进行继承,因为 Single Inheritance 消除了在决定要选择的基类时的任何歧义,但要对接口具有类似的行为,则需要解析重叠的属性名称。
    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 2016-02-17
    • 2010-12-23
    • 2016-08-09
    • 2015-12-19
    • 2021-10-27
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多