Я хочу показать пользовательскую коллекцию в DataGridView в приложении Windows Forms. Эта пользовательская коллекция реализует ICollection и IEnumerable. Я установил BindingSource, используя коллекцию как свойство .DataSource. DataGridView установлен для использования моего BindingSource в качестве источника данных. Когда я добавляю новый элемент в коллекцию с помощью метода BindingSource.Add(), DataGridView корректно обновляется с новым элементом. С другой стороны, источник данных BindingSource не имеет значения:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
В приведенном выше коде внутренний список myBindingSource содержит правильное количество записей (3), а DataGridView также содержит три записи, но myCollection содержит только две записи. Я знаю, что изменение базового myCollection НЕ обновит BindingSource или DataGridView, так как это не BindingList<T>, но я был под впечатлением, что обновление BindingSource напрямую обеспечило бы, чтобы myCollection был обновлен на то же время.
Есть ли способ использовать коллекцию, которая не является BindingList<T>, и обновлять ее при непосредственном взаимодействии с BindingSource?
Обновить. Один из способов, которым я обновил данные во всех частях (Collection, BindingSource, DataGridView), выглядит следующим образом:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
Я уверен, что есть лучший способ атаковать эту проблему, но это единственный метод, который породил результаты, которые я ожидал.