DataGridでヘッダクリックのソート順を昇順→降順→なし→昇順にしたい。
DataGridのヘッダクリックのソートは便利です。(3回目)
ただ、デフォルトだとソートの切替が昇順→降順→昇順のループになって元に戻せません。
初期ソート順が、第2ソートキーまである場合とかだと、ヘッダクリックで元の表示順に戻せないのは致命的です。
通常、ヘッダクリックのソートだと昇順→降順→なし→昇順のループとなる場合が多いと思います。
今回はその昇順→降順→なし→昇順のループにする方法です。
簡単にいうとSortingイベントをハンドリングして自前で実装します。
具体的には以下のようなコードをいれるだけです。
private void DataGrid_OnSorting(object sender, DataGridSortingEventArgs e) { if (e.Column.SortDirection == ListSortDirection.Descending) { // 降順の次はソートを無効にする e.Column.SortDirection = null; e.Handled = true; // イベントを処理済みにする。(デフォルトのソート機能を実行しない) // このままでは矢印アイコンが消えて降順になるだけなので、以下の処理をいれる。 var view = CollectionViewSource.GetDefaultView(((DataGrid)sender).ItemsSource); view.SortDescriptions.Clear(); } }
MVVM向けに簡単に実装できるようにCommandをFinalstreamUIComponentsで提供しています。
FinalstreamUIComponents/CancelableDataGridSortingCommand.cs at master · finalstream/FinalstreamUIComponents · GitHub
デフォルトで昇順→降順→なし→昇順のループだといいんですがねー。