2012-04-24 16 views
8

The MSDN reference page for ObservableCollection<T> notas:.Al usar ObservableCollection <T>, ¿todavía necesito implementar INotifyPropertyChanged en tipo T?

"los objetos en su colección deberán cumplir los requisitos descritos en el Binding Sources Overview En particular, si está utilizando OneWay o TwoWay (por ejemplo, usted quiere que su interfaz de usuario para actualizar cuando las propiedades de origen cambiar dinámicamente), debe implementar un mecanismo de notificación de cambio de propiedad adecuado, como la interfaz INotifyPropertyChanged ".

Desde ObservableCollection<T> ya implementa INotifyPropertyChanged, ¿por qué necesito otra vez para poner en práctica INotifyPropertyChanged en T también?

Respuesta

7

Considere su colección observable como una fuente de datos para una tabla. Cada objeto de la colección ocupa una fila y se muestra en la tabla en varias columnas.

La vista (es decir, su tabla) necesita saber cuándo modificar cada celda en respuesta a las propiedades cambiantes de los objetos, pero también en respuesta a la adición y eliminación de objetos hacia y desde la colección.

Su colección observable se ocupa de las filas de la tabla: notifica a sus observadores cuando un objeto se inserta, quita, mueve, y así sucesivamente. Sin embargo, carece de conocimiento de lo que está sucediendo con los objetos individuales, por lo que no sirve de nada tratar las columnas de la tabla.

Aquí es donde entran sus objetos: al implementar INotifyPropertyChanged dejan que su tabla administre los datos en las columnas.

+0

Gran explicación convincente. Sucinto y claro. +1 – TripleAntigen

3

INotifyPropertyChanged debe ser provocado por el objeto cuyas propiedades están cambiando. ObservableCollection no puede simplemente detectar cambios en los objetos que contiene y pasarlos en su nombre.

El motivo por el que la colección implementa INotifyPropertyChanged no es particularmente útil. Sospecho que solo va a plantear un evento de cambio para la propiedad Count de la colección que cambiaría a medida que se agreguen o eliminen elementos a la colección.

Si solo le interesan los elementos que se agregan o eliminan, es posible que no necesite implementar esta interfaz en su clase. Pero si su UI es vinculante para las propiedades del objeto, deberá implementarlo si desea que la UI reaccione.

Cuestiones relacionadas