2012-10-18 56 views

回答

3

ICollectionView只能由CollectionView類實現。 MSDN-documentation指出CollectionView不應該在你的代碼中實例化,而是使用CollectionViewSource對象來獲得你的集合視圖。

如果你想擁有自己的T集合中的CollectionView回來,你需要自己的集合(實現IEnumerable的)添加到CollectionViewSource對象,並從那裏得到的CollectionView,例如:

List<MyClass> listToView = new List<MyClass>(); 
    MyClass x1 = new MyClass() { Name = "Fictive Name 1", Description = "Description...", Date = DateTime.Now}; 
    MyClass x2 = new MyClass() { Name = "Fictive Name 2", Description = "Description...", Date = DateTime.Now}; 
    MyClass x3 = new MyClass() { Name = "Fictive Name 3", Description = "Description...", Date = DateTime.Now}; 
    listToView.Add(x1); 
    listToView.Add(x2); 
    listToView.Add(x3); 

    CollectionViewSource collectionViewSource = new CollectionViewSource(); 
    collectionViewSource.Source = listToView; 
    ICollectionView collectionView = collectionViewSource.View; 

T之所以沒有ICollectionView可能是因爲它沒有這樣設計。該documentation指出的CollectionView已被設計爲給出一個集合了不同的看法,而不改變它:

你可以把一個集合視圖作爲綁定 源集合,它允許你之上的一層根據排序,過濾器和組查詢導航並顯示 集合,全部不需要操作基礎源集合本身。

在這方面它是有道理的,你只能視圖收集,因此而得名「ViewCollection」。

我認爲期望ICollectionView of T作爲CollectionView並不是第一次實例化(在添加一些排序功能後,請參閱下面的有趣警告)。

System.Windows.Data警告:52:直接使用CollectionView不是 完全受支持。基本功能雖然有效,但效率低下,但高級功能可能會遇到已知的錯誤。 考慮使用派生類來避免這些問題。

我認爲該體系結構的設計基於「只讀」級別而不改變其基礎數據源,因爲這是對數據集合進行分組,過濾和導航的重點。但是,如果你想確切地知道爲什麼,你可能不得不與微軟的這個部分工作的人談一談。

相關問題