2009-02-06 24 views
5

Estoy subclasificando el control ListBox estándar. Me notifican los cambios en cualquiera de los elementos agregados a la lista. La tarea es actualizar el texto mostrado por el ListBox para el elemento cambiante.C# Force ListBox para actualizar los elementos

Soy consciente de que podría simplemente eliminar el elemento modificado y agregarlo nuevamente, pero esto no parece preferible por razones obvias.

+0

posible duplicado de [¿Cómo puedo hacer que un ListBox actualice el texto de su elemento?] (Http://stackoverflow.com/questions/61421/how-do-i-make-a-listbox-refresh-its-item- texto) – Timwi

+0

No solo es un duplicado de la pregunta mencionada anteriormente; la otra pregunta también tiene respuestas mucho mejores. – Timwi

Respuesta

15

Desafortunadamente, el enlace de datos en ListView no admite eventos de notificación de cambio (elemento) regulares (FooChanged/INotifyPropertyChanged). Sin embargo, si conoce el cambio, puede obtener la lista para volver a vincularse. Puesto que usted está de subclases, puede llamar a:

this.RefreshItems(); 

o para un solo elemento:

this.RefreshItem(index); 

De lo contrario, ya que esto no es pública, puede simular cambiando el DisplayMember:

lb.DisplayMember = ""; 
lb.DisplayMember = "Bar"; 

Un poco hacky, tal vez, pero funciona, y mantiene la selección actual, etc. (a diferencia de borrar el DataSource).

+0

Gracias hombre. Parece que los métodos 'un poco hacky' funcionan mejor que los métodos documentados en MS Windows. – fnc12

1

¿Por qué no actualiza manualmente el texto de un elemento en cuestión? También podría considerar implementar su propio mecanismo de enlace de datos para ListBox. Y mira ObjectListView para ver si te sirve de ayuda.

+0

El ListBox no se preocupa por los ToStrings cambiados de los elementos mostrados. Invalidar falla también. Echaré un vistazo a ObjectListView, parece interesante. :) – mafu

Cuestiones relacionadas