カスタムソートが実装された 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;
}
LineSorterは、 IComparer実装を使用したカスタム ソーター クラスです。これはうまくいきます。ここで、ListCollectionView に上ロックと下ロックを適用します。上記で次のコードを試しましたが、変更はありません(つまり、リストはカスタムソート列のみに基づいてソートされます)。
listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending));
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending));
このシナリオを行う方法はありますか、またはロックされたレコードを手動で削除してから追加する必要がありますか? 提案してください..