Si como yo vienes del mundo XAML, sabes de la importancia del DataBinding y los ViewModels para llevar a buen puerto el patrón MVVM.
Cuando utilizamos listas en nuestras vistas y necesitamos interactuar con ellas, lo normal es utilizarlas de tipo ObservableCollection en nuestro ViewModel, ya que implementan la interface INotifyCollectionChanged, que viene a ser el equivalente a la interface INotifyPropertyChanged para las colecciones.
Cualquier clase que implementa la interface INotifyCollectionChanged necesita informar a los elementos que están suscritos sobre la creación, modificación o eliminación de sus elementos. Sin embargo, cuando utilizamos una colección observable, vemos que no tenemos disponible las opciones de AddRange o RemoveRange, por lo que sólo nos queda la opción de limpiar la lista y cargar todos los datos de nuevo, con lo que nuestra UI tiene que eliminar todos los elementos, volverlos a pintar y claro, no es el tipo de efecto que buscas en tu aplicación.
Es en este caso en el que entra en juego ReactiveList de nuestro framework favorito, Reactiveui.
El ejemplo que he montado es una aplicación universal de Windows, UWP y lo tienes en este enlace. Puedes ver cómo integrar ReactiveUi leyendo los artículos de mi amigo Ramón Esteban. Primero y Segundo.
En el ejemplo he creado un servicio de datos de pruebas en el que devuelvo, desde el método Listen(), un observable al que me suscribo en mi ViewModel para ir añadiendo elementos a mi lista.
También he añadido una suscripción al evento CounterChanged de mi ReactiveList para mostrar el número de elementos en una etiqueta en la UI, pero no es el único evento al que nos podemos suscribir. Tenemos todos estos disponibles para jugar con ellos según nuestras necesidades:
- BeforeItemsAdded
- ItemsAdded
- BeforeItemsRemoved
- ItemsRemoved
- BeforeItemsMoved
- ItemsMoved
- CountChangin
- CountChanged
- Changed
- ShouldReset
Con esto tienes una primera aproximación para jugar ReactiveList. Espero seguir escribiendo sobre esto, ya que las listas son una parte fundamental de nuestras aplicaciones y poder jugar con ellas de forma reactiva nos permite tener una UI mucho más amigable.