【发布时间】:2013-02-11 14:29:41
【问题描述】:
我有一个实现了自定义排序的 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));
这种情况有什么办法吗,还是我需要手动删除然后添加锁定的记录。请建议..
【问题讨论】:
-
您可以创建三个不同的集合并将其合并。一个集合将具有顶部锁定,第二个具有底部锁定,第三个集合将具有其余所有元素。
-
更改您的
LineSorter.Compare()实现以始终将顶部锁定的项目返回为小于其他项目,并将底部锁定的项目返回为大于其他项目。我假设你不能这样做是有原因的?
标签: wpf c#-4.0 wpfdatagrid listcollectionview