我有我的自定义网格,它继承自DataGrid
(来自 WPFToolkit),其中包含大约 10000 个项目。内置排序非常慢。因此,我编写了一个单独的类,该类保持DataRowView
每列的所有项目的运行排序(这是有效的,因为从网格中添加和删除非常罕见,如果有的话)。
网格具有AutoGenerateColumns='True'
并绑定到DefaultView
a 的DataTable
。
我覆盖OnSorting
以知道何时单击列标题并尝试ItemsSource
用我的 DataRowView 排序列表替换网格。下面是方法:
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
.
我相信最好的方法是DataView
从我的排序列表中创建一个DataRowView
并将其传递给,ItemsSource
但我还没有取得任何成功。
任何想法如何在不破坏自动生成的列的情况下将新的行列表传递给 ItemsSource 或 Items?手动生成我的所有列不是一种选择。
干杯,肖恩