【发布时间】:2010-11-10 08:07:29
【问题描述】:
我遇到了一个我知道一定很常见的情况,所以我希望解决方案很简单。我有一个包含 List 对象的对象。它还有一些属性可以反映 List 中对象的聚合数据(实际上是 BindingList,所以我可以绑定到它)。在我的表单上,我有一个用于列表的 DataGridView,以及用于聚合数据的其他一些字段。当 DataGridView 中的值发生更改时,我不知道如何触发聚合数据的刷新。
我尝试在 List 中对象的属性发生更改时引发 PropertyChanged 事件,但这似乎不会刷新聚合数据的显示。如果我访问一个聚合属性(例如,在消息框中显示它),主窗体上的文本框会被刷新。
这里有一些简化的代码来说明我想要做什么:
namespace WindowsFormsApplication1 {
public class Person {
public int Age {
get;
set;
}
public String Name {
get;
set;
}
}
public class Roster : INotifyPropertyChanged {
public BindingList<Person> People {
get;
set;
}
public Roster () {
People = new BindingList<Person>();
}
private int totalage;
public int TotalAge {
get {
calcAges();
return totalage;
}
set {
totalage = value;
NotifyPropertyChanged("TotalAge");
}
}
private void calcAges () {
int total = 0;
foreach ( Person p in People ) {
total += p.Age;
}
TotalAge = total;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged ( String info ) {
if ( PropertyChanged != null ) {
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
}
【问题讨论】:
-
这看起来与stackoverflow.com/questions/601320/… 非常相似,可能是它的副本。
标签: c# winforms data-binding