Durch das Aktualisieren von BindingSource in WinForms wird die Datenquellensammlung nicht aktualisiert

Ich möchte eine benutzerdefinierte Sammlung in a anzeigenDataGridView in einer Windows Forms-App. Diese benutzerdefinierte Sammlung wird implementiertICollection, undIEnumerable. Ich habe einen eingerichtetBindingSourceVerwenden der Auflistung als .DataSource-Eigenschaft. DasDataGridView soll meine verwendenBindingSource wie es ist DataSource. Wenn ich der Sammlung einen neuen Gegenstand hinzufüge, benutze ich dieBindingSource.Add() Methode, dieDataGridView wird mit dem neuen Element korrekt aktualisiert. DasBindingSource DataSource hingegen bietet Folgendes nicht:

MyCustomCollection myCollection = new MyCustomCollection();

myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);

myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);

Im obigen Code enthält die interne Liste von myBindingSource die richtige Anzahl von Datensätzen (3) und dieDataGridView enthält auch drei Datensätze, aber myCollection enthält nur zwei Datensätze. Ich weiß, dass das Ändern der zugrunde liegenden myCollection das NICHT aktualisiertBindingSource oder derDataGridView, da es sich nicht um eineBindingList<T>, aber ich hatte den Eindruck, dass ein UpdateBindingSource würde direkt sicherstellen, dass myCollection zur gleichen Zeit aktualisiert wurde.

Gibt es eine Möglichkeit, eine Sammlung zu verwenden, die keine ist?BindingList<T> und aktualisieren Sie es bei der Interaktion mit derBindingSource direkt?

Aktualisieren: Eine Möglichkeit, die Daten über alle Teile (Sammlung, BindingSource, DataGridView) hinweg zu aktualisieren, ist die folgende:

myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;

Ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, um dieses Problem anzugehen, aber dies ist die einzige Methode, die die erwarteten Ergebnisse erzielt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage