Tengo muchas entidades anidadas List<>
en cada una.
Por ejemplo, tengo lo BaseEntity
que tiene List<ColumnEntity>
.
ColumnEntity
clase tiene List<Info>
y así sucesivamente.
Estamos trabajando con una interfaz de usuario de WPF y necesitamos realizar un seguimiento de todos los cambios en cada lista de BaseEntity
. Se implementa creando una instancia new ObservableCollection
basada en la lista necesaria y con un enlace a eso ObservableCollection
.
¿Cuáles son los pros y los contras cambiando todos estos anidados Lists
a ObservableCollections
? Entonces, ¿podemos rastrear todos los cambios en BaseEntity
sí mismo sin reasignar cada lista BaseEntity
a un límite modificado ObservableCollection
?
Suponiendo que los métodos específicos de List
nunca se utilizan.
Depende exactamente de lo que quieras decir con esto:
¿Sería suficiente realizar un seguimiento de los cambios en los objetos que ya están en la lista? ¿O necesita saber cuándo los objetos se eliminan, se agregan o cambian de posición dentro de la lista?
Si una lista contendrá los mismos elementos durante toda su vida, pero los objetos individuales dentro de esa lista cambiarán, entonces es suficiente que solo los objetos generen notificaciones de cambio (generalmente a través
INotifyPropertyChanged
) yList<T>
es suficiente. Pero si la lista contendrá diferentes objetos de vez en cuando, o si el orden cambia, entonces debería usarObservableCollection<T>
.Entonces, si bien las diferencias pueden ser interesantes (y un póster anterior ya las ha cubierto), generalmente no tendrá muchas opciones, o las necesita
ObservableCollection<T>
o no.fuente
Lista 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 usando una matriz cuyo tamaño se incrementa dinámicamente según sea necesario.
ObservableCollection es una recopilación de datos dinámicos genéricos que utiliza una interfaz "INotifyCollectionChanged" para proporcionar notificaciones cuando se agregan, eliminan elementos 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
fuente
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 una lista desde cualquier hilo.
fuente
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 se le notificará sobre los cambios. Además, si se modifican los objetos que están contenidos en ObservableCollection, no se le notificará. La notificación se produce solo si se agregan, reemplazan, eliminan o mueven elementos.
fuente