【发布时间】:2019-10-30 15:57:50
【问题描述】:
我正在使用 DataGrid 并通过代码隐藏以编程方式生成列。 这些列是从 DataGridTextColumn 派生的,并添加了一些用于将键输入锁定为特定类型的附加功能。
我需要对列进行数字排序:
1
2
10
11
而不是默认的基于字符串的排序:
1
10
11
2
我尝试了 DataGridSortingEvent,但它无法从 BindingListCollectionView 转换为 IList
ListCollectionView lcv = new ListCollectionView((IList)CollectionViewSource.GetDefaultView(dataGrid.ItemsSource));
这是我创建 DataGrid 的方式
DataSet set = new DataSet();
set.ReadXml(xmlDocument.CreateReader());
DataView data = set.Tables["row"];
dataGrid.ItemsSource = data;
这是我创建列的块
dataGrid.Columns.Add(new DataChimpIntegerColumn()
{
Header = column.ColumnTitle,
Binding = new Binding(column.ColumnTitle),
MaxWidth = 150,
DefaultValue = column.ColumnDefault,
});
还有事件块
private void dataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
DataGridColumn column = e.Column;
IComparer comparer = null;
if (e.Column.SortMemberPath != "id") return;
e.Handled = true;
ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending)
? ListSortDirection.Ascending : ListSortDirection.Descending;
column.SortDirection = direction;
// Error -->
ListCollectionView lcv = new ListCollectionView((IList)CollectionViewSource
.GetDefaultView(dataGrid.ItemsSource));
comparer = new SortNumerical(direction);
lcv.CustomSort = comparer;
}
确切的错误信息是:
System.InvalidCastException: 'Unable to cast object of type 'System.Windows.Data.BindingListCollectionView' to type 'System.Collections.IList'.'
【问题讨论】: