WPF DataGrid自定义排序,同时锁定部分记录

5

我有一个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));

有没有什么方法可以处理这种情况,或者我需要手动删除然后添加被锁定的记录。请建议。


1
你可以创建三个不同的集合并将其合并。一个集合将具有顶部锁定,第二个集合将具有底部锁定,第三个集合将具有其余所有元素。 - D J
3
请将 LineSorter.Compare() 的实现方式更改为永远将顶部锁定的项视为小于其他项,将底部锁定的项视为大于其他项。不过,我假设您不能这样做有原因吧? - Tim Rogers
1个回答

0

好的。你可以从你的代码中实现这个。

假设一下

The page size         = 10 

Current page          = 2

Collection name       = myItems

First Item to display = initialItem

Last Item to display  = lastItem

步骤:

  • 对集合进行排序
  • 从集合中取出9到16个项目(8个项目) (因为您在第二页)

初始项目编号= 8 x(当前页码-1)+ 1最后一个项目

编号= 8 x当前页码

所以:

初始项目编号= 8 x(2-1)+ 1 = 9

最后一个项目编号= 8 x 2 = 16

(现在您有一个已排序的8个项目的子集合)

  • 将initialItem添加到子集合的顶部

myItems.Insert(0, initialItem);

  • 将lastItem添加到子集合的末尾

    myItems.Insert(9, lastItem);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接