2009-06-11 25 views
3

C#:どのように効率的にフィルタを適用する(非表示)ListViewアイテムは、仮想モード中にですか?C#:バーチャルモードでListViewアイテムを効果的にフィルタリング(非表示)する方法

私は、仮想モードでListViewの項目をフィルタリング(非表示/表示)する方法を探しています。私は自分のアイテムをリストビューアイテムの配列にキャッシュしていますが、フィルターボタンを押したときに特定のリストビュー項目だけが表示されるようにするにはどうしたらいいですか?

答えて

2

RetrieveVirtualItemがアイテムを要求するときに、表示された行のリストをマップする必要があります。これにより、フィルタリングされたリストに表示可能なアイテムのみが含まれます。

CacheVirtualItemsを使用してListViewItemを格納する場合は、フィルタリングを適用するときにそのキャッシュを更新し、すべての非表示行を削除する必要があります。複雑さを軽減するために、その時点でキャッシュをクリアすることができます。

0

私はListViewに表示されていたオブジェクトにFilterResultプロパティを追加してプロジェクトでこれを行いました。そして、ListViewコントロールのために使用されるアイテムテンプレートで、私は視認性にセッターで、FilterResultにDataTriggerを入れて、何かのように:示したユーザは、フィルタを変更するとその後、私はちょうどコレクションを経る

<DataTrigger Binding="{Binding FilterResult}" Value="False"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
</DataTrigger> 

、更新各FilterResult(PropertyChanged通知プロパティ)とvoila! :=)

FilterResultフラグを使用する別の解決策は、FilterResultをtrueにしている項目のみを公開するNotifierCollectionをメインのCollectionにフックすることです。したがって、FilterResultの1つの項目の値を切り替えると、CollectionChangedイベントを管理する必要があります。

関連する問題