2013年02月27日

WPFサンプル:CollectionViewSourceを使ったListViewの並び替えとフィルター処理

   このエントリーをはてなブックマークに追加 Clip to Evernote
前回「WPFサンプル:CollectionViewSourceを使い、ListViewを表示する」では、並び順をXAMLで
指定しただけなので、ヘッダー部分をクリックしても並び替えは行えませんでしたが、
今度はヘッダー部をクリックして並び替えを行えるようにします。

CollectionView21

CollectionView22

まずは、XAMLから。前回との違いは、GridViewColumnHeader.Click の指定を追加しただけです。


全体を示します。


Bookクラスと、BookListクラスは、前回と全く同じなので割愛します。

さて、前回はコードビハインドには何も追加しませんでしたが、今度はいろいろと書いていきます。

ひとつひとつ説明するのは面倒なので、MainWindow クラス(C#)を一度に載せちゃいます。


_lastHeaderClicked 変数は、どのヘッダーがクリックされたのかを覚えておくもの。
_lastDirection変数は、最後にソートされた方向(昇順、降順)を覚えておくものです。
_collectionView変数は、ListViewに関連付けられたCollectionViewSourceです。

GridViewColumnHeaderClickedHandlerで、どのカラムヘッダーがクリックされたのかを調べ、
ソート順を決定し、Sortメソッドを呼び出しています。
Sortメソッドで、CollectionViewSourceにソートを指示しています。
Aカラム、Bカラムの順にクリックしたら、第2ソートキーをBカラムにするといった処理にしたい場合には、
もう少し工夫が必要ですが、CollectionViewSourceでどう並び替えをするのか
という本質が見えにくくなるのでここでは単純なやり方にしています。

おまけで、フィルター処理も追加しましょう。
例えば、この画面では、Priceが2600以上の書籍のみを表示させたいという場合には、MianWindowの
コンストラクタを以下のように記述します。


このコードには、どこにもモデルであるBookListクラスへの参照コードは出てきません。
常に、ViewSourceに対しての操作になっている点に注意してください。

スクリーンショットを見ていただければわかりますが、カラムヘッダーに▼や▲マークがありません。
やはり、▼や▲マークを表示させたいですよね。
次回は、その方法をお見せします。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52306698