2012-02-22 3 views
0

Wpfバインディングは、それをよく知っている人にとって面白いですし、初心者のための悪夢です。 コメントアウトされたCollectionViewにコンボボックスをバインドすると、コントロールによってフィルタによって除外された要素を含むすべての要素が表示されます。同じコンボボックスをICollectionViewにバインドすると、フィルタリングされた要素だけが表示され、OKです。コンボボックスをCollectionViewにバインドすると、フィルタされた要素が表示されます。どうして?

//public CollectionView MyCapitoliList { get; private set; } 
public ICollectionView MyCapitoliList { get; private set; } 

ここで私はCollectionViewとICollectionViewのを作成するために使用するコード

MyCapitoliList = CollectionViewSource.GetDefaultView(listaCapitoli); 
//MyCapitoliList = new CollectionView(listaCapitoli); 


MyCapitoliList.Filter = new Predicate<object>(isCapitoloMaster); 

私はC#のコードからすべての要素を印刷CollectionViewをチェックし、それが唯一のフィルタの要素が含まれているので、CollectionViewがOKであります。 フィルタリングされていない要素をコンボボックスにバインドすると、すべての要素が取得されるのはなぜですか?

おかげ フィリッポ

+0

あなたのコードはすべてここに表示されていません。あなたが使用しているコードを表示できますか?そして、動作するはずだと思います。リストにバインドされているコレクションは、コメントアウトされたコードを省略してください。 – ColinE

答えて

1

MSDN約CollectionViewクラス...

あなたは、あなたのコード内でこのクラスのオブジェクトを作成するべきではないと言います。 IEnumerableのみを実装するコレクションの コレクションビューを作成するには、 CollectionViewSourceオブジェクトを作成し、 Sourceプロパティにコレクションを追加し、Viewプロパティからコレクションビューを取得します。

それはさらに... WPFアプリケーションで

を追加し、すべてのコレクションは、関連するデフォルト コレクションビューを持っています。コレクションを直接操作するのではなく、 バインディングエンジンは、関連付けられた ビューを通じてコレクションに常にアクセスします。既定のビューを取得するには、 CollectionViewSource.GetDefaultViewメソッドを使用します。

+0

しかし、CollectionViewsは何のために使用されるのですか? – Filippo

関連する問題