私はカスタムソートを実装したWPF Datagridを実装しています。私は、コレクションのレコードのいくつかをトップとボトム(トップロックとボトムロック)にロックする必要があります。だから、特定のレコードがトップロックされている場合は、選択したカラムの値に関係なく、コレクションの最初のレコードである必要があります(つまり、TopロックとBottomロックを並べ替える必要はありません)。ここに私のカスタムソート方法があります。 LineSorterがたIComparer実装と私のカスタムソータークラスです一部のレコードがロックされたWPF DataGridカスタムソート
private void PerformLineCustomSort(DataGridColumn column)
{
ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
column.SortDirection = direction;
ListCollectionView listCollectionView = (ListCollectionView)CollectionViewSource.GetDefaultView(Lines);
LineSorter lineSort = new LineSorter(direction, column);
listCollectionView.CustomSort = lineSort;
}
。これは正常に動作します。今度はListCollectionViewにトップロックとボトムロックを適用したいと思います。上記のコードを試してみましたが、変更はありません(リストはカスタムソート列のみに基づいてソートされています)。
listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending));
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending));
このシナリオを実行する方法はありますか、手動でロックしたレコードを削除して追加する必要がありますか。お勧めします..
3つの異なるコレクションを作成し、結合することができます。1つのコレクションには上部ロックがあり、2つ目に下部ロックがあり、3つ目のコレクションにはすべての要素が残ります。 –
あなたの 'LineSorter.Compare()'実装を変更して、トップロックされたアイテムを他のアイテムよりも少なく、ボトムロックされたアイテムを他のアイテムよりも大きく返すようにします。私はあなたがこれを行うことはできない理由があると仮定していますか? –