[Silverlight]PagedCollectionViewとチェックボックスを組み合わせた動的フィルタリングソリューション
31067 ワード
前の記事でにおいて、PagedCollectionはフィルタ機能を提供する.
実際のプロジェクトでは、このようなニーズがあります.
すなわち、上述した例のフィルタGender列の特定の項目のような、DataGirdの関連項目は、チェックボックスによって動的にフィルタされる.ObservableCollectionを直接操作すればいいのではないかと考えている人もいるかもしれません.2つの問題があります PagedCollectionViewはもともとフィルタ機能を提供していますが、ObservableCollectionを操作するのは少し愚かではないでしょうか. ObservableCollectionを操作すると(フィルタリングの場合は一般的に削除される)、集合自体も変化するが、PagedCollectionViewが提供するフィルタリングは、集合項目 を変更することなくUIに変化を反映するだけである.
上記の2つの問題がある以上、PagedCollectionViewのFilterプロパティを正直に使ってフィルタリングを実現しましょう.
しかし依然として問題が存在して、これはしばらく言わないで、まず正常な情況の下で私達が以上の需要を実現するためにしなければならない仕事を見てみましょう
まずXAMLに4つのチェックボックスを追加します
3つのCheckBoxと1つのStackPanelをレイアウトの必要性に加えて、すべてのCheckBoxを巡回して操作をフィルタすることができます.
次はCheckBoxでClickのcsコードでは次のような作業を行います.
チェックボックスが1つしかないなら簡単にできます
しかし、今私たちはN個のCheckBoxを持っています.PagedCollectionViewのFilterはまたPredicate
実際のプロジェクトでは、このようなニーズがあります.
すなわち、上述した例のフィルタGender列の特定の項目のような、DataGirdの関連項目は、チェックボックスによって動的にフィルタされる.ObservableCollectionを直接操作すればいいのではないかと考えている人もいるかもしれません.2つの問題があります
上記の2つの問題がある以上、PagedCollectionViewのFilterプロパティを正直に使ってフィルタリングを実現しましょう.
しかし依然として問題が存在して、これはしばらく言わないで、まず正常な情況の下で私達が以上の需要を実現するためにしなければならない仕事を見てみましょう
まずXAMLに4つのチェックボックスを追加します
<StackPanel Orientation="Horizontal" x:Name="cbContainer">
<CheckBox Content=" " IsChecked="True" Click="CheckBox_Click"/>
<CheckBox Content=" " IsChecked="True" Click="CheckBox_Click" />
<CheckBox Content=" " IsChecked="True" Click="CheckBox_Click" />
</StackPanel>
3つのCheckBoxと1つのStackPanelをレイアウトの必要性に加えて、すべてのCheckBoxを巡回して操作をフィルタすることができます.
次はCheckBoxでClickのcsコードでは次のような作業を行います.
チェックボックスが1つしかないなら簡単にできます
string genderToFilter = ((CheckBox)sender).Content.ToString();
_pcv.Filter = p => ((Person)p).Gender == genderToFilter;
しかし、今私たちはN個のCheckBoxを持っています.PagedCollectionViewのFilterはまたPredicate