.net - 数据绑定(bind)到实现 IEnumerable 的对象的属性

标签 .net winforms data-binding

我正在尝试将简单的数据绑定(bind)到对象的实例。像这样的事情:

public class Foo : INotifyPropertyChanged
{
    private int bar;
    public int Bar { /* snip code to get, set, and fire event */ }

    public event PropertyChangedEventHandler PropertyChanged;
}

// Code from main form
public Form1()
{
    InitializeComponent();
    Foo foo = new Foo();
    label1.DataBindings.Add("Text", foo, "Bar");
}

这一直有效,直到我修改 Foo 类以实现 IEnumerable,其中 T 是 int、字符串等。此时,当我尝试添加数据绑定(bind)时,我收到 ArgumentException:无法绑定(bind)到数据源上的属性或列 Bar。

就我而言,我不关心枚举,我只想绑定(bind)到对象的不可枚举属性。有什么干净的方法可以做到这一点吗?在实际代码中,我的类没有实现 IEnumerable,而链上几层的基类却实现了。

目前最好的解决方法是将对象放入仅包含单个项目的绑定(bind)列表中,然后绑定(bind)到该项目。

这里有两个相关问题:

最佳答案

您可以创建一个包含在您的类中的子类,该子类继承自 enumerable 并绑定(bind)到它。有点像这样:

class A : IEnumerable { ... }
class Foo : A
{
   private B _Abar = new B();
   public B ABar
   {
      get { return _Abar; }
   }
}

class B : INotifyPropertyChanged
{
   public int Bar { ... }
   ...
}

public Form1()
{
    InitializeComponent();
    Foo foo = new Foo();
    label1.DataBindings.Add("Text", foo.ABar, "Bar");
}

这应该可以解决问题。

关于.net - 数据绑定(bind)到实现 IEnumerable 的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1336395/

相关文章:

.net - 异常处理中的选项与异常

c# - 为什么我在 listView1 上没有属性项?

c# - 安全登录表格和注册表(带序列号)

c# - WPF 数据绑定(bind) : Cancelled property change - Combobox misaligns

silverlight - Windows Phone - 依赖属性

c# - 我的类应该实现什么接口(interface)或方法来在 Console.WriteLine 中打印我想要的内容?

c# - 如何以编程方式重建现有程序集?

c# - 打开标准 "Find Network Printer"对话框

c# - 如何限制右键单击仅选定的 ListView 项目或项目而不是空白空间?

asp.net - 当数据库模式更改时如何获得编译时错误?