WPFのDataGridではデフォルトでヘッダクリックのソート機能が実装されます。
しかもデータの型がint型の場合は数値ソートになります。
ただ、数値以外も混じる場合はstring型にせざるを得ないと思います。そのstring型にすると文字列ソートになます。
文字列ソートでデータが数値メインだといまいちなソート順になります。1,10,11,2という感じで。
そこでカスタムソートなわけですが、DataGridで指定する場合、いろいろと気をつけなければならないことがあったのでまとめときます。
ちなみにエクスプローラと同様のソートを実現するナチュラルなコンペアラについては詳しくは説明しませんが、FinalstreamCommonsにあります。
流れはSortingイベントをハンドリングしてビューを取得してCustomSortにコンペアラを設定。 コンペアラはソートしたい列にあった処理をするようにする。
以下にコードを記しますが、ポイントは以下の2つですかね。
- e.Handledにtrueを設定する。(これをしないとカスタムソートが効かない)
- 列ごとにソートキーが異なると思うので、列にあったコンペアラを指定する。(カスタムソートの指定はGrid単位)
なんかもっといいやり方がありそうな気がするのですが、APIを見る限りではこれ以外なさそうだったので。