ComboBox wird nicht automatisch aktualisiert, wenn sich die DataSource ändert?

8

Aus irgendeinem Grund wird beim Hinzufügen oder Entfernen von Elementen aus der DataSource (eine einfache BindingList) die ComboBox entsprechend aktualisiert, aber wenn ich ein Element wie dieses editiere, wird es nicht automatisch aktualisiert:

%Vor%

Um es zu aktualisieren, wenn ich ein Element bearbeite, anstatt ein Objekt zu erstellen oder zu entfernen, muss ich dies tun, nachdem die Änderung vorgenommen wurde:

%Vor%

Dies behebt das Problem, aber es scheint eine ziemlich chaotische Lösung zu sein. Auch bei großen Listen kann es langsam werden (vorzeitige Optimierung weiß ich), aber gibt es noch eine Möglichkeit, die ComboBox zu zwingen, zu aktualisieren, ohne ihre DataSource vollständig neu zuzuordnen?

Danke fürs Lesen.

    
Kyle McClooney 11.09.2011, 17:07
quelle

2 Antworten

6

Dies wird in den MSDN-Foren angegeben:

  

Die IBindingList-Schnittstelle enthält das ListChanged-Ereignis wo   Steuerelemente wie die Combobox hängen in die zugrunde liegende Datenquelle ein   zugewiesen, implementiert die genannte Schnittstelle. Ihre Datenquelle muss   Erhebe den entsprechenden ListChanged mit dem richtigen ListChangeEventArgs if   Wenn Sie Ihren IBindingList-Implementierer hinzufügen, entfernen, ändern usw.   Auf diese Weise, immer wenn die zugrunde liegende Quelle, die Sie an Ihre Bindung gebunden haben   Combobox wird geändert, die entsprechende UI-Steuerung (Combobox) ist   aktualisiert.

Sie sagen, dass Sie BindingList verwenden, und in der Tat erhalten Sie die Combobox, um Objekte Ereignisse hinzuzufügen oder zu entfernen. Ich denke, du solltest die Aktualisierung der Elemente, die sich bereits in deiner BindingList befinden, auf eine andere Weise machen, weil es aussieht, als würden die richtigen BindingList-Ereignisse nicht ausgelöst.

Sie könnten entweder das untersuchen oder einfach mit reset leben und die DataSource neu zuweisen, ich denke nicht, dass Sie sich in der Stateful Windows Forms Anwendung befinden und nicht in den SaateLess Webforms, also haben Sie Ihre Objekte immer dort: )

    
Davide Piras 11.09.2011, 17:16
quelle
0

Sie benötigen beobachtbare Auflistungen und die Implementierung von IPropertyChange:

ComboBox, das an eine ObservableCollection gebunden ist, wird nicht aktualisiert

    
Juan Puebla 11.09.2011 17:16
quelle