我有一个DataTable,其中所有列数据类型都是名为CellModel的自定义类。
表格的默认视图绑定到DataGrid,它自动生成一些模板列,我设置DataTemplates和Bindings,并显示数据完美无缺。
我的问题是当我尝试对列进行排序时。 我想对自定义类中的特定属性进行排序,但默认排序器不会识别自定义类,因此它会调用ToString()。通过覆盖和归还我的财产,我能够排序,但它 PAINFULLY 慢。
我尝试在DataGrid.Sorting事件上实现自定义排序器,如下所示:
private void DG_Sorting(object sender, DataGridSortingEventArgs e)
{
var column = e.Column;
e.Handled = true;
var direction = (column.SortDirection != ListSortDirection.Ascending)
? ListSortDirection.Ascending
: ListSortDirection.Descending;
var lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(DG.ItemsSource);
column.SortDirection = direction;
lcv.CustomSort = new MyComparer();
lcv.Refresh();
}
但GetDefaultView返回不支持CustomSorters的BindingListCollectionView ..
我输了。如何实现自定义比较器以对数据进行排序?
答案 0 :(得分:0)
发现了这个问题。通过使用lcv。 SortDescriptions 并在CellModel类上实现 IComparer 接口,我能够使用自定义比较。 此外,由于我在Datagrid上虚拟化禁用,因此排序速度受到影响。通过启用虚拟化,排序速度更快。