我有一个WPF Datagrid与自定义排序实施,它工作正常。我需要将集合中的一些记录锁定到顶部和底部(顶部锁定和底部锁定)。所以当一个特定的记录被顶部锁定时,它应该是集合中的第一条记录,而不管所选列的值如何(即我不想对那些顶部锁定和底部锁定的行进行排序)。这是我的自定义排序方法。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));
有没有办法做这种情况下,还是我需要手动删除,然后添加锁定的记录。请建议..
你可以创建三个不同的集合和联合它。一个集合将有顶级锁,第二个有底部锁,第三个集合将有所有元素休息。 – 2013-02-26 08:44:33
将您的'LineSorter.Compare()'实现更改为始终返回顶部锁定项目的数量小于其他项目,并将底部锁定项目的数量大于其他项目。我假设有一个原因,你不能这样做,但? – 2013-02-26 08:59:47