Это вопрос привязки данных в C #.
У меня есть простой класс Person:
public class Person {
public string Name {get; set;}
public string Level {get; set;}
}
И у меня есть класс Group, который содержит свойство Persons в виде экземпляров BindingList of Person:
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"}
};
После приведенного выше кода привязка данных перестает работать. Добавление вызовов ResetBindings () из BindingSource или DataGridView не устраняет разрыв привязки данных.
Поскольку мой BindingSource связан со свойством Persons класса Group, я думаю, что изменение свойства Persons не должно нарушать привязку данных, но на самом деле это так. Но это то, что мы обычно делаем, если привязываем строковое свойство к Label или TextBox. Мы просто назначаем новый экземпляр строки свойству, и Label или TextBox будут обновляться правильно. Почему это не работает для коллекций экземпляров? Какой правильный код для достижения того же поведения? Большое спасибо.