の.NetインターフェイスがないのはなぜICollectionView<T>
ですか?それを見ると、ICollectionView
を期待するのは非常に明白なようですICollectionView<T>
。
私は何かが足りないのですか?
の.NetインターフェイスがないのはなぜICollectionView<T>
ですか?それを見ると、ICollectionView
を期待するのは非常に明白なようですICollectionView<T>
。
私は何かが足りないのですか?
ICollectionViewは、CollectionViewクラスによってのみ実装されます。MSDNのドキュメントでは、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がない理由は、おそらくそのように設計されていないためです。ドキュメントは、CollectionViewがコレクションを変更せずに異なるビューを提供するように設計されていることを指摘しています。
コレクションビューは、バインドされたソースコレクションの上のレイヤーと考えることができます。これにより、基になるソースコレクション自体を操作しなくても、並べ替え、フィルター、およびグループクエリに基づいてコレクションをナビゲートおよび表示できます。
その点で、コレクションのみを表示できることは理にかなっているため、「ViewCollection」という名前が付けられています。
CollectionViewはそもそもインスタンス化されることを意図していないため、TのICollectionViewを期待することはそれほど明白ではないと思います(いくつかの並べ替え機能を追加した後、以下の興味深い警告を参照してください)。
System.Windows.Data警告:52:CollectionViewを直接使用することは完全にはサポートされていません。基本的な機能は機能しますが、非効率的ですが、高度な機能では既知のバグが発生する可能性があります。これらの問題を回避するには、派生クラスの使用を検討してください。
アーキテクチャは、基になるデータソースを変更せずに「読み取り専用」ベースのレベルで機能するように設計されていると思います。これは、データコレクションのグループ化、フィルタリング、およびナビゲートが主に焦点を当てているためです。
ただし、その理由を正確に知りたい場合は、フレームワークのこの部分に取り組んでいるMicrosoftの誰かと話をする必要があります。