2012-05-08 17 views
7

Tengo un cuadro de lista con elementos vinculados a un ObservableCollection.Cómo actualizar la interfaz de usuario de ViewModel con ObservableCollection?

Ahora, desde dentro del viewModel, necesito causar una actualización de la IU. No tengo una referencia al cuadro de lista de mi modelo de vista.

Si elimino o agrego un elemento de mi ObservableCollection, la interfaz de usuario se actualiza.

Basado en alguna otra lógica, necesito actualizar la interfaz de usuario ... pero el ObservableCollection es el mismo.

¿Cómo puedo actualizar la interfaz de usuario SIN agregar o eliminar elementos de mi ObservableCollection?

Gracias

+0

¿qué hay que actualizar si nada en la colección ha cambiado? –

+0

Honestamente ... tenemos una gran aplicación que usa WPF y MVVM y NUNCA necesitábamos eso. Cuéntanos qué quieres actualizar exactamente, porque estoy seguro de que hay formas de lograrlo. – dowhilefor

+0

Si necesita actualizar la interfaz de usuario sin modificar su colección, entonces tal vez debería estar conectando algo más en su máquina virtual a su vista ... no todo tiene que ser databound a través de 'ObservableCollection's ... – BoltClock

Respuesta

9

Si necesita cambiar su interfaz de usuario, ya que ha editado los artículos en su colección, a continuación, se debe organizar para aquellos artículos que implementan la interfaz INotifyPropertyChanged. Si los objetos de su colección tienen un evento PropertyChanged, la interfaz de usuario escuchará ese evento desde elementos individuales. (Si es posible, también se puede cambiar los artículos en su colección para ser DependencyObjects con DependencyProperties, que lleva a cabo el mismo objetivo.)

Si realmente necesidad de desencadenar una actualización de la interfaz de usuario cuando nada en absoluto sobre su colección ha cambiado, la forma de hacerlo es elevar manualmente el evento CollectionChanged. Esto no se puede hacer con el ObservableCollection<> como está, pero podría derivar una nueva colección de esa clase y llamar al método protected OnCollectionChanged desde un nuevo método, public.

+0

Gracias por la respuesta ..eso tiene sentido. – user1202434

3

He tenido un problema similar en el que quería cambiar el fondo de un elemento, pero obviamente ni el elemento ni la colección han cambiado.

Se logró llamando:

CollectionViewSource.GetDefaultView(your_collection_name).Refresh(); 

Este refrescado la vista desde el modelo de vista sin alterar las colecciones

Cuestiones relacionadas