C# WPF DataGrid-使用DataTable作为ItemsSource进行自定义排序

C# WPF DataGrid-使用DataTable作为ItemsSource进行自定义排序,c#,wpf,datatable,datagrid,icomparable,C#,Wpf,Datatable,Datagrid,Icomparable,使用DataGrid,我显示一个DataTable,其中包含运行时生成的内容。因此,我不能使用预定义的列。每行包含一个名称作为其第一个元素,然后是一个可变数量的数据,这些数据通常是数字,但也可能是null或字符串“Invalid” 目前,所有数据都被解释为字符串,这导致问题是对列进行排序会产生字母顺序,而不是数字顺序,例如“0,1,12,20,3”而不是“0,1,3,12,20”。我试图通过从IComparable(DataGrid会忽略)继承所有显示的数据,或者覆盖DataGrid的OnSor

使用DataGrid,我显示一个DataTable,其中包含运行时生成的内容。因此,我不能使用预定义的列。每行包含一个名称作为其第一个元素,然后是一个可变数量的数据,这些数据通常是数字,但也可能是
null
或字符串
“Invalid”

目前,所有数据都被解释为字符串,这导致问题是对列进行排序会产生字母顺序,而不是数字顺序,例如“0,1,12,20,3”而不是“0,1,3,12,20”。我试图通过从
IComparable
(DataGrid会忽略)继承所有显示的数据,或者覆盖DataGrid的
OnSorting()
方法来解决这个问题(我只找到假定我使用的是ListCollectionView而不是DataTables的源)


有人知道如何在绑定到运行时生成的DataTable的DataGrid上实现自定义排序行为吗?

我会使用DataTable,而不是篡改DataGrid

如果无法对DataTable的源执行任何操作,则可以使用DataView获取DataTable的排序视图(请参见DataView.Sort)

将DataView绑定到DataGrid

添加一个额外的列,并使用DataColumn.Expression将字符串值转换为数值,并处理空值和无效值

请参见此处的示例:


尝试添加具有整数排序值的列,并为此列设置
DataGridColumn.SortMemberPath
。另外,请花一分钟时间阅读。