Производительность WPF DataGrid и выборочный рендеринг - PullRequest
0 голосов
/ 25 марта 2011

Я связываю DataGrid с динамическим набором данных (данные поиска в таблице БД)

В большинстве случаев это работает нормально, примите, когда столбцы хранят большой набор информации.Одним из таких примеров являются столбцы типа XML, в которых хранится довольно большой фрагмент данных конфигурации XML.

В этом случае сетка замедляется до обхода, даже если ширина / высота столбца ограничена показом только первых 300 символов данных в этой ячейке.

Таким образом, кажется, что сетка отображает все данные в ячейке, а не только видимую часть.

Есть ли способ настроить DataGrid так, чтобы он отображал только часть таких ячеек в общем виде (поскольку я не могу предвидеть, какие столбцы будут нуждаться в этом)?

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Это может быть не связано, но у меня были всевозможные проблемы с DataGrid, в которых потребовались буквально секунды для обновления после изменения размера окна, сортировки столбца и т. Д. И блокировки пользовательского интерфейса окна в это время (1000 строк, 5 столбцов).

Это связано с проблемой (ошибкой?) Расчетов размера WPF. У меня было это в сетке с RowDefinition Height = "Auto", которая заставляла систему рендеринга пытаться пересчитать размер DataGrid во время выполнения, измеряя размер каждого столбца и строки, предположительно, заполняя всю сетку ( как я понимаю). Предполагается, что это нужно как-то разумно, но в данном случае это не так.

Быстрая проверка, чтобы увидеть, является ли это связанной проблемой, состоит в том, чтобы установить свойства Высота и Ширина DataGrid на фиксированный размер на время теста, и попробуйте запустить снова. Если ваша производительность восстановлена, постоянное исправление может быть одним из следующих вариантов:

  • Изменить размеры содержащихся элементов на относительные (*) или фиксированные значения
  • Установите для MaxHeight и MaxWidth DataGrid фиксированное значение, большее чем он мог бы получить при обычном использовании
  • Попробуйте другой тип контейнера с другой стратегией изменения размера (Grid, DockPanel и т. Д.)
0 голосов
/ 25 марта 2011

Попробуйте обернуть содержимое вашей ячейки в ScrollViewer или что-то, что включает виртуализацию, но с отключенными полосами прокрутки.

Альтернативой является возвращение только первых 300 символов вашего источника данных

...