ObservableCollection vs. List

Tengo muchas entidades con List anidada List en cada una.

Por ejemplo, tengo BaseEntity que tiene List . ColumnEntity clase ColumnEntity tiene List y así sucesivamente.

Estamos trabajando con una interfaz de usuario de WPF , y necesitamos hacer un seguimiento de todos los cambios en cada lista de BaseEntity . Se implementa instanciando un new ObservableCollection basado en la lista necesaria, y con el enlace a ese ObservableCollection .

¿Cuáles son los pros y los contras que cambian todas estas Lists anidadas a ObservableCollections ? Entonces, ¿podemos hacer un seguimiento de todos los cambios en BaseEntity sin reasignar cada lista de BaseEntity a ObservableCollection enlazado modificado?

Suponiendo que los métodos específicos de la List nunca se usan.

Una pregunta interesante, considerando que tanto List como ObservableCollection implementan IList no hay mucha diferencia, ObservableCollection también implementa la interfaz INotifyCollectionChanged , que permite a WPF vincularse a ella.

Una de las principales diferencias es que ObservableCollection no tiene el método AddRange , que podría tener algunas implicaciones.

Tampoco utilizaría ObservableCollection para lugares donde sé que no sería vinculante, por esta razón es importante revisar su diseño y asegurarse de que está tomando el enfoque correcto para separar las capas de preocupación.

En cuanto a las diferencias entre Collection y List , puedes consultar aquí Generic Lists vs Collection

Depende de exactamente lo que quieres decir con esto:

necesitamos hacer un seguimiento de todos los cambios en cada Lista de BaseEntity

¿Sería suficiente seguir los cambios a los objetos que ya están en la lista? ¿O necesita saber cuándo se eliminan / se agregan o se cambian los puestos dentro de la lista?

Si una lista contendrá los mismos elementos para toda su vida, pero los objetos individuales dentro de esa lista cambiarán, entonces es suficiente para que solo los objetos eleven las notificaciones de cambio (normalmente a través de INotifyPropertyChanged ) y List es suficiente. Pero si la lista contendrá diferentes objetos de vez en cuando, o si el orden cambia, entonces debe usar ObservableCollection .

Por lo tanto, aunque las diferencias pueden ser interesantes (y un póster anterior ya las cubrió), normalmente no tendrá tantas opciones, ya sea que necesite ObservableCollection o no.

List representa una lista fuertemente tipada de objetos a los que se puede acceder por índice. Proporciona métodos para buscar, ordenar y manipular listas. La clase List es el equivalente genérico de la clase ArrayList. Implementa la interfaz genérica IList utilizando una matriz cuyo tamaño se incrementa dinámicamente según sea necesario.

ObservableCollection es una colección de datos dinámica genérica que utiliza una interfaz “INotifyCollectionChanged” para proporcionar notificaciones cuando se agregan, eliminan o cuando se actualiza toda la colección.

Lea más sobre esto en este enlace: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha

No veo ningún problema con eso, aparte de una sobrecarga de rendimiento muy marginal.

Tenga en cuenta que si modifica las Listas internas directamente, no recibirá notificaciones sobre cambios. Además, si los objetos que están contenidos en el ObservableCollection se modifican, no se le notificará. La notificación solo se produce si los elementos se agregan, reemplazan, eliminan o mueven.

Una diferencia más importante es que puede acceder a ObservableCollection solo desde el hilo en el que se creó, donde se puede acceder a la lista desde cualquier hilo.