74 votes

ObservableCollection <> vs List <>

J'ai beaucoup d'entités imbriquées List<> dans chaque

Par exemple, j'ai BaseEntity qui a List<ColumnEntity> ColumnEntity catégorie a List<Info> et ainsi de suite.

Nous travaillons avec WPF de l'INTERFACE utilisateur, et nous avons besoin de suivre toutes les modifications dans chaque Liste de BaseEntity. Maintenant, il est mis en œuvre avec la création d' new ObservableCollection basé sur la liste des besoins, et avec la liaison à qui ObservableCollection.

Pouvez-vous nommer les avantages et les inconvénients de changer tout cela Listes imbriquées à ObservableCollections? Nous pouvons donc suivre tous les changements dans BaseEntity lui-même sans réaffectation chaque liste de BaseEntity modifié lié ObservableCollection?

En supposant que toutes les méthodes spécifiques à la Liste ne sont jamais utilisés.

85voto

Stan R. Points 8967

Question intéressante, considérant que les deux Liste et ObservableCollection œuvre IList<T> il n'y a pas beaucoup de différence il y a, ObservableCollection met également en œuvre l' INotifyCollectionChanged interface, qui permet de WPF à se lier à elle.

L'une des principales différences est que l' ObservableCollection n'ont pas d' AddRange méthode, qui peut avoir certaines conséquences.

Aussi je ne voudrais pas utiliser ObservableCollection pour les endroits où je sais que je ne serait pas contraignant pour, pour cette raison, il est important d'aller sur votre conception et assurez-vous que vous prenez la bonne approche séparer les couches de préoccupation.

Les différences entre Collection<T> et List<T> vous pouvez jetez un oeil ici Générique Listes vs Collection

30voto

Ian Griffiths Points 7382

Cela dépend exactement ce que vous voulez dire par cela:

nous avons besoin de suivre toutes les modifications dans chaque Liste de BaseEntity

Serait-il suffisant pour suivre les modifications apportées aux objets déjà dans la liste? Ou avez-vous besoin de savoir quand les objets sont supprimés à partir de/sont ajoutés/changer de position dans la liste?

Si une liste contient les mêmes éléments pour l'ensemble de leur durée de vie, mais les différents objets à l'intérieur de cette liste va changer, alors il suffit juste de les objets à soulever des notifications de changement (généralement par le biais d' INotifyPropertyChanged) et List<T> est suffisante. Mais si la liste contient différents objets de temps en temps, ou si les changements de commande, vous devez utiliser ObservableCollection<T>.

Ainsi, alors que les différences peuvent être intéressantes (et une affiche précédente a déjà couverts de ceux-ci), en général vous n'aurez pas beaucoup de choix - soit vous avez besoin d' ObservableCollection<T> ou vous n'avez pas.

10voto

Rayan Elmakki Points 186

Liste représente un typage fort que la liste des objets qui peuvent être accessibles par un index. Il fournit des méthodes pour rechercher, trier et manipuler les listes. La Liste de la classe est l'équivalent générique de la classe ArrayList. Il met en œuvre la IList interface générique à l'aide d'un tableau dont la taille est dynamiquement augmenter.

ObservableCollection générique est une dynamique de collecte de données qui utilise une interface "INotifyCollectionChanged" fournir des notifications lorsque des éléments sont ajoutés, supprimés, ou lorsque l'ensemble de la collection est actualisée.

Lire plus à ce sujet dans ce lien: http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha

6voto

codymanix Points 12119

Cela ne me pose aucun problème, mis à part une surcharge de performance très marginale.

Notez que si vous modifiez directement les listes internes, vous n'êtes pas averti des modifications. De plus, si les objets contenus dans ObservableCollection sont modifiés, vous n'êtes pas averti. La notification survient seulement si des éléments sont ajoutés, remplacés, supprimés ou déplacés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X