2010-01-22 3 views
2

Selon MSDN, il existe une surcharge pour le constructeur ObservableCollection auquel vous pouvez passer un IEnumerable. Selon la très courte page MSDN cela fera une "copie" de l'Ienumerable.Comportement du constructeur ObservableCollection (IEnumerable)

Comment puis-je déterminer comment cela va se comporter? Est-ce que la "Copie" sera totalement indépendante de l'original ou bien les changements apportés à l'Ienumerable (comme par une requête linq) seront-ils reflétés automatiquement dans ObservableCollection?

MSDN Page

Répondre

4

Ce constructeur promenades à travers les éléments de la IEnumerable et chacun ajoute à la ObservableCollection. Une fois cela terminé, le nouveau ObservableCollection n'a plus rien à voir avec le IEnumerable (sauf que si vous traitez un ensemble de types de références, le ObservableCollection contiendra des références aux mêmes objets que ceux fournis par le IEnumerable).

+0

Cela explique pourquoi les choses me semblaient étranges, My Ienumerable est le résultat d'une requête Linq. Je m'attendais à avoir une collection "plate" des résultats de la requête, mais à la place je reçois des objets comme _Employee1 = {System.Data.Linq.EntityRef } Je supposais que depuis ObserveableCollection ne implémenter IQueryable qu'ils ne pouvaient pas être des références. Maintenant je vois que vous pouvez avoir deux collections contenant les mêmes références mais en implémentant des interfaces différentes? Vous pouvez interroger le IQueryable et lier à ObservableCollection pour obtenir le meilleur des deux mondes? –