У меня всегда были серьезные проблемы с производительностью при установке .ItemsSource для Datagrid в коллекцию. Метод возвращается быстро, но есть очень заметная задержка, прежде чем что-либо фактически отображается на экране. Поскольку Datagrid имеет установленные режимы виртуализации, он должен легко обрабатывать очень большие коллекции. Я распечатал некоторую отладочную информацию в связанных свойствах коллекции элементов, чтобы убедиться, что она загружает не всю коллекцию, а только для доступа к первым нескольким элементам, поэтому я уверен, что виртуализация работает. И даже для небольших коллекций задержка примерно одинакова, поэтому она не связана с фактической загрузкой данных.
Так что только рендеринг вызывает замедление. В большинстве случаев это вызвано наличием Datagrid внутри ScrollViewer или автоматической генерацией высоты строки и т. Д. Но я исключил все эти возможные причины, задав все фиксированные ширины, и убедившись, что ничего не установлено в «Бесконечный» или «Авто».
После недолгого выдергивания волос я попробовал что-то простое: я переключил Datagrid для GridView. И, к моему изумлению, он не страдает от большой задержки, он рисует мгновенно. Оба имеют одинаковые свойства и стиль, поэтому я пытаюсь понять, почему Datagrid был намного медленнее.
Есть ли логическая причина, по которой DataGrid может работать медленнее, чем GridView?