У меня есть собственная сетка, которая наследуется от DataGrid
(из WPFToolkit) и содержит около 10000 элементов. Встроенная сортировка очень медленная. Таким образом, я написал отдельный класс, который поддерживает сортировку всех DataRowView
элементов для каждого столбца (это работает, потому что добавления и удаления из сетки крайне редки, если вообще).
Сетка имеет AutoGenerateColumns='True'
и привязана к DefaultView
из 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, не разрушая автоматически сгенерированные столбцы? Создание всех моих столбцов вручную не вариант.
Привет, Шон