我有一个实现了自定义排序的 WPF Datagrid,它工作正常。我需要将集合中的一些记录锁定到顶部和底部(Top Lock 和Bottom Lock)。因此,当特定记录被顶部锁定时,它应该是集合中的第一条记录,而不管所选列的任何值(即我不想对顶部锁定和底部锁定的行进行排序)。这是我的自定义排序方法。
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));
有什么办法可以做到这种情况,还是我需要手动删除然后添加锁定的记录。请建议..
最佳答案
好。您可以通过代码实现这一点。
让我们假设
The page size = 10 Current page = 2 Collection name = myItems First Item to display = initialItem Last Item to display = lastItem
脚步:
(因为你在第二页)
initial item number = 8 x (Current page number -1) + 1 last item
number = 8 x current page number
所以:
initial item number = 8 x (2 - 1) + 1 = 9
last item number = 8 x 2 = 16
(现在您有 8 个已排序项目的子集合)
myItems.Insert(0, initialItem);
myItems.Insert(9, lastItem );
关于WPF DataGrid 自定义排序并锁定了一些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084034/