爲什麼ICollectionView<T>
沒有.Net接口?看着ICollectionView
這似乎很明顯,預計ICollectionView<T>
。爲什麼沒有.Net接口的ICollectionView <T>?
我錯過了什麼嗎?
爲什麼ICollectionView<T>
沒有.Net接口?看着ICollectionView
這似乎很明顯,預計ICollectionView<T>
。爲什麼沒有.Net接口的ICollectionView <T>?
我錯過了什麼嗎?
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不是 完全受支持。基本功能雖然有效,但效率低下,但高級功能可能會遇到已知的錯誤。 考慮使用派生類來避免這些問題。
我認爲該體系結構的設計基於「只讀」級別而不改變其基礎數據源,因爲這是對數據集合進行分組,過濾和導航的重點。但是,如果你想確切地知道爲什麼,你可能不得不與微軟的這個部分工作的人談一談。