ObservableCollection
es una colección especializada que puede notificar a los suscriptores cuando sus contenidos de cambio, mientras que INotifyPropertyChanged
es una interfaz que permite a los implementadores a notificar a los suscriptores cuando uno de sus propiedades valor cambios.
Probablemente se esté preguntando cómo se relacionan los dos (porque ambos están "involucrados" en el escenario en su ejemplo).
consideran este código:
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel());
Los abonados al evento INotifyCollectionChanged.CollectionChanged
que ahora sabemos que las cosas han cambiado y que debe actualizar en consecuencia.
Pero ahora un vistazo a esto:
var model = new MyViewModel(); // assume it's the class with Payments inside
model.Payments.Add(new PaymentViewModel()); // OK, we know what this does
model.Payments = new ObservableCollection<PaymentViewModel>();
Después de añadir un elemento a la colección que luego intercambio de toda la colección por otro. Si un ItemsControl
está vinculado a esta colección, esperamos que se actualice y refleje el hecho de que model.Payments
termina siendo vacío. Pero, ¿cómo puede hacer eso?
CollectionChanged
no ayudará porque la colección original (después de recibir su primer elemento) no se modificó; simplemente lo descartamos e instalamos otro en su lugar. El único que sabe que el cambio sucedió es el establecimiento de propiedades Payments
. Entonces el colocador utiliza INotifyPropertyChanged
para decirle a los suscriptores que la colección ha sido reemplazada por otra, y por supuesto deben actualizar su estado.
Conclusión: obras de enlace de datos automagicamente en WPF porque todos los controles de enlace de datos escuchan la INotifyPropertyChanged
de su DataContext
, y si el destino de enlace implementa INotifyCollectionChanged
se suscriban a eso también. Si el objetivo vinculante cambia, se les notificará a través del INotifyPropertyChanged
, darse de baja de INotifyCollectionChanged
en el objetivo anterior y suscribirse a él en el nuevo.
también entiendo su respuesta. También da una buena respuesta. Gracias. – pratikjgandhi