0

Wpfバインディングは、それをよく知っている人にとっては面白いものであり、初心者にとっては悪夢です。コメントアウトされたCollectionViewにコンボボックスをバインドすると、フィルターによって除外された要素を含むすべての要素がコントロールに表示されます。同じコンボボックスをICollectionViewにバインドすると、フィルター処理された要素のみが表示され、問題ありません。

 //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);

CollectionViewがC#コードからすべての要素を印刷していることを確認しましたが、フィルター処理された要素のみが含まれているため、CollectionViewは問題ありません。コンボボックスにバインドすると、フィルタリングされていない要素がすべて取得されるのはなぜですか?

ありがとうフィリッポ

4

1 に答える 1

1

MSDNはCollectionViewクラスについて述べています...

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

さらに追加します...

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

于 2012-02-22T08:30:50.800 に答える