2014-09-04 94 views
0

我有一個ObservableCollectionMyParent對象,它們又有自己的ObservableCollectionMyChild對象。現在我想在網格視圖中顯示全部MyChild對象,這自然要求展平集合。使用CompositeCollection展平集合的集合?

CompositeCollection看起來很有希望。

問:是否可以在CompositeCollection中包裝任意數量的集合?

如果不是,是否有替代方案?

+0

CompositeCollection確實允許您添加任意數量的集合和元素,但這可能不是必需的。我也可以推薦@謝里登的回答你的情況。 – pushpraj 2014-09-04 13:50:56

回答

3

沒有必要使用任何CompositeCollection來做你想做的。您可以使用簡單的LinQ查詢中的Enumerable.SelectMany Method從所有MyParent對象中提取所有對象MyChild。試試這個:

using System.Linq; 

... 

var children = YourParentCollection.SelectMany(i => i.MyChild).ToList(); 

如果你不熟悉這些Enumerable擴展方法,你一定要調查他們。

+0

如果集合發生了變化(例如添加/刪除)會怎麼樣。更新邏輯會使用這種方法嗎? – l33t 2014-09-04 14:06:30

+0

我不確定你的意思,但是這段代碼會從* YourParentCollection中的所有MyParent對象中選擇* MyChild對象的* all *。這不是很多代碼......你爲什麼不試試呢? – Sheridan 2014-09-04 14:19:46

+1

我相信他問的是來自源集合的集合更改事件是否會傳播結果,答案是否定的。不過,CompositeCollection會傳播事件。 – 2014-09-04 14:34:22