【发布时间】:2012-05-01 22:21:34
【问题描述】:
我有我的自定义网格,它继承自 DataGrid(来自 WPFToolkit),其中包含大约 10000 个项目。内置排序非常慢。因此,我编写了一个单独的类,该类为每列保留所有 DataRowView 项目的运行排序(这是有效的,因为从网格中添加和删除的情况非常少,如果有的话)。
网格具有AutoGenerateColumns='True' 并绑定到DataTable 的DefaultView。
我覆盖OnSorting 以了解何时单击列标题并尝试用我的DataRowView 排序列表替换网格的ItemsSource。方法如下:
private void RefreshItems()
{
if (_updating || _multiIndexer.Count == 0)
return;
try
{
_updating = true;
this.AutoGenerateColumns = false;
// replace the itemssource with my maintained and sorted list of
// DataRowView items
this.ItemsSource = _multiIndexer.ToList();
}
finally
{
//this.AutoGenerateColumns = true;
_updating = false;
}
}
问题是我破坏了自动生成中存在的列。此外,我只剩下与DataRowView 中的属性匹配的列。
我相信最好的方法是从我的DataRowView 排序列表中创建一个DataView 并将其传递给ItemsSource,但我还没有取得任何成功。
任何想法如何在不破坏自动生成的列的情况下将新的行列表传递给 ItemsSource 或 Items?手动生成我的所有列不是一种选择。
干杯, 肖恩
【问题讨论】:
标签: wpf sorting datagrid datatable dataview