Я использую DataGrid
с CellEditingTemplates
. В качестве ItemsSource
используется виртуализированная коллекция данных (решение AlphaChiTech), которая извлекает только страницы размером 100 элементов за раз по запросу.
Он прекрасно работает до тех пор, пока ячейка не будет дважды нажата в форме редактирования, затем VirtualizingStackPanel
запрашивает все элементы один за другим. Конечно, в качестве побочного эффекта в конечном итоге запрашиваются все страницы.
Есть ли способ обойти эту проблему?
Изменить:
Я нашел обходной путь, который может помочь людям в моей ситуации:
В конце концов я заметил, что VirtualizingStackPanel не запрашивает все элементы при условии, что высота строки остается прежней после переключения на форму редактирования. До обхода моя форма редактирования была немного выше.
Сейчас я настроил MinHeight элементов управления в ячейках (как обычных, так и редактируемых) таким образом, чтобы при переходе на форму редактирования высота не менялась.
К сожалению, это работает только при определенных условиях. Есть случаи, когда это не сработает:
Использование
RowDetailsTemplate
. Как только он виден, виртуализация нарушена. Я предполагаю, что детали строки принадлежат самой строке, поэтому высота строки снова увеличивается.Вызов события Reset для Collection соответственно для CollectionView. По моему опыту, это вообще убийца для виртуализации данных с
DataGrids
.Уменьшение
Count
коллекции (это также не вызывает проблемы с событием сброса).
Интересно, что увеличение Count
коллекции сработало. Но пришлось усилить возможности АльфаЧиТека (благо исходники есть на гитхабе), т.к. там нет возможности поменять Count
без поднятия события Reset из коробки (по крайней мере я не нашел). Кроме того, элементы DataGrid's
должны быть обновлены сразу же после этого, иначе будет выдано исключение, указывающее, что ItemsControl
и коллекция имеют несогласованное состояние.
Детали строк для меня необязательны, но удаление элементов без нарушения виртуализации данных имеет решающее значение. Таким образом, проблема все еще остается. Мой обходной путь, скорее всего, поможет людям с коллекциями фиксированного размера, но, к сожалению, не мне.