【发布时间】:2010-10-04 23:47:30
【问题描述】:
这是一个 C# 中的数据绑定问题。
我有一个简单的 Person 类:
public class Person {
public string Name {get; set;}
public string Level {get; set;}
}
我有一个 Group 类,它包含一个 Persons 属性作为 Person 实例的 BindingList:
public class Group {
private BindingList<Person> persons_;
public BindingList<Person> Persons {
get { return persons_; }
set { persons_ = value; }
}
}
最后,我使用 BindingSource 将组实例连接到 DataGridView:
// Instantiate a Group instance.
Group p = new Group();
p.Persons = new BindingList<Person> {
new Person {Name = "n1", Level = "l1"},
new Person {Name = "n2", Level = "l2"},
new Person {Name = "n3", Level = "l3"}
};
BindingSource bs = new BindingSource();
bs.DataSource = p;
bs.DataMember = "Persons";
DataGridView dgv = new DataGridView();
dgv.DataSource = bs;
在上面的代码之后,DataGridView 会显示三个 Person 实例。一切正常。然后我有一个按钮,当单击该按钮时,我创建另一个 Person BindingList 并用它来替换 p.Persons:
p.Persons = new BindingList<Person> {
new Person {Name = "n10", Level = "l10"},
new Person {Name = "n11", Level = "l11"},
new Person {Name = "n12", Level = "l12"}
};
在上面的代码之后,数据绑定停止工作。从 BindingSource 或 DataGridView 添加 ResetBindings() 调用并不能解决数据绑定的中断问题。
由于我的 BindingSource 绑定到 Group 类的 Persons 属性,我认为 Persons 属性的更改不应该破坏数据绑定,但实际上确实如此。但这是我们通常在将字符串属性绑定到标签或文本框时所做的。我们只需为属性分配一个新的字符串实例,标签或文本框将正确更新自身。为什么这不适用于实例集合?实现相同行为的正确代码是什么?非常感谢。
【问题讨论】:
标签: c# data-binding