使用自定义数据类型将DataTable绑定到DataGrid

时间:2013-12-05 15:08:20

标签: sorting datagrid datatable dataview

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

我输了。如何实现自定义比较器以对数据进行排序?

1 个答案:

答案 0 :(得分:0)

发现了这个问题。通过使用lcv。 SortDescriptions 并在CellModel类上实现 IComparer 接口,我能够使用自定义比较。 此外,由于我在Datagrid上虚拟化禁用,因此排序速度受到影响。通过启用虚拟化,排序速度更快。