我有一个WPF数据表格,已经实现了自定义排序,它运作良好。我需要将集合中的一些记录锁定在顶部和底部(顶部锁定和底部锁定)。因此,当特定记录被顶部锁定时,它应该是集合中的第一条记录,而不考虑所选列的任何值(即我不想对那些被顶部锁定和底部锁定的行进行排序)。以下是我的自定义排序方法。
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 接口。这个工作正常。现在我想将 Top lock 和 Bottom lock 应用到 ListCollectionView 上。我尝试了上面的代码,但它没有任何改变(即列表仅基于自定义排序列排序)。
listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending));
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending));
有没有什么方法可以处理这种情况,或者我需要手动删除然后添加被锁定的记录。请建议。
LineSorter.Compare()
的实现方式更改为永远将顶部锁定的项视为小于其他项,将底部锁定的项视为大于其他项。不过,我假设您不能这样做有原因吧? - Tim Rogers