У меня проблемы с ситуацией, которая, как я знаю, должна быть довольно распространенной, поэтому я надеюсь, что решение будет простым. У меня есть объект, содержащий список объектов <>. Он также имеет некоторые свойства, которые отражают совокупные данные об объектах в списке <> (на самом деле BindingList <>, поэтому я могу привязываться к нему). В моей форме у меня есть DataGridView для List и некоторые другие поля для совокупных данных. Я не могу понять, как вызвать обновление агрегированных данных, когда значения в DataGridView будут изменены.Winforms Объект привязки данных, содержащий Список <T>
Я попытался воссоздать событие 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
}
}
Это похоже на http://stackoverflow.com/questions/601320/winforms-data-binding-bind-to-objects-in-a-list и может быть дубликатом. –