2011-09-11 24 views
8

Per qualche ragione quando si aggiungono o rimuovere elementi dalla DataSource (un semplice BindingList) ComboBox aggiorna di conseguenza, ma se modifico un oggetto come questo, non aggiorna automaticamente:ComboBox non si aggiorna automaticamente quando DataSource cambia?

myBindingList[index].Name = "NewName"; 
myBindingList[index].Value = newValue; 

Per ottenerlo aggiornare quando ho modificare un elemento in contrasto con la creazione o la rimozione di un elemento che devo fare questo dopo che il cambiamento è fatto:

myComboBox.DataSource = null; 
myComboBox.DataSource = myBindingList; 

questo risolve il problema, ma sembra una soluzione piuttosto disordinato. Anche con elenchi di grandi dimensioni può diventare lento (l'ottimizzazione prematura lo so) ma c'è ancora un modo per forzare il ComboBox ad aggiornarsi senza riassegnare completamente il suo DataSource?

Grazie per la lettura.

risposta

6

Questo è indicato nelle sedi MSDN:

L'interfaccia IBindingList contiene l'evento ListChanged dove controlli come combobox agganciano in se l'origine dati sottostante assegnato implementa la detta interfaccia. l'origine dati deve aumentare il ListChanged corrispondente con ListChangeEventArgs appropriato se mai aggiunto, rimosso, modificato, ecc. implementatore IBindingList. in questo modo, ogni volta che la sorgente sottostante che hai utilizzato per associare la tua casella combinata viene modificata, il controllo dell'interfaccia utente corrispondente (casella combinata) è aggiornato a .

si dice che si sta utilizzando BindingList e in effetti si ottiene la casella combinata per riflettere aggiungere o rimuovere gli eventi. Penso che dovresti fare l'aggiornamento degli articoli già all'interno del tuo BindingList in un altro modo perché sembra che gli eventi BindingList non stiano sparando.

si può indagare su questo o semplicemente vivere con reset e riassegnare il DataSource, non penso sia troppo male, si è in Statefull applicazione Windows Form non in Webforms SatetLess in modo da avere gli oggetti lì tutto il tempo :)

Problemi correlati