我正在尝试将简单的数据绑定(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/