5

我有一个实现了自定义排序的 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 应用 Top lock 和 Bottom lock。我已经用上面的代码尝试了下面的代码,但它没有任何变化(即列表仅基于自定义排序列进行排序)。

listCollectionView.SortDescriptions.Add(new SortDescription("TopLock", ListSortDirection.Descending));
listCollectionView.SortDescriptions.Add(new SortDescription("BotLock", ListSortDirection.Ascending));

有什么办法可以做到这一点,还是我需要手动删除然后添加锁定的记录。请建议..

4

1 回答 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 最后一项

number = 8 x 当前页码

所以:

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

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

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

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

myItems.Insert(0, initialItem);

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

    myItems.Insert(9, lastItem);

于 2013-03-06T07:07:45.953 回答