Я пробовал использовать как настроенный DataGrid, так и стандартный в WPF. Я пробовал заполнять их вручную, а также через привязки. В обоих случаях они медленные.
У меня есть сценарий, в котором пользователь нажимает кнопку, и появляется DataGrid с соответствующими данными. В настоящее время я нахожусь в режиме проверки концепции и просто использую образцы данных. У меня есть DataSet с таблицей, в которой есть 10 строк.
Если я не прикрепляю какие-либо данные к DataGrid, когда я нажимаю кнопку, пустая DataGrid отображается практически мгновенно, пользователь не может почувствовать задержку. Как только я добавляю 10 строк данных для 6 столбцов, задержка составляет около 2 секунд, что очень заметно для пользователя.
Я даже пробовал заполнить пустыми данными, просто чтобы появилась пустая сетка, и она такая же медленная.
for (int i = 0; i < 10; i++)
_dataGrid.Items.Add("");
Я установил таймер для подсчета тиков с момента нажатия кнопки до момента, когда весь код будет выполнен для рисования DataGrid, и это около 20 миллисекунд, поэтому код выполняется очень быстро, но на экране большая задержка . Я попробовал GridView, и он очень быстро отображается на экране.
Я слышал различные отчеты о медленном рисовании DataGrid со сложными сценариями и использованием 1000 строк, но это настолько просто, насколько возможно, 6 столбцов на 10 строк, заполненных пустыми данными.
Для отображения только для чтения является ли GridView столь же жизнеспособным вариантом для DataGrid?
Обновлять
Вот создание моих колонок.
DataGridTextColumn column = new DataGridTextColumn();
column.ColumnWidthChanged += new ColumnWidthChangedEventHandler(column_ColumnWidthChanged);
column.Header = entity.GetPropertyValue("ColumnLabel");
column.Binding = new Binding(entity.GetPropertyValue("Tag"));
column.Width = new DataGridLength(entity.GetPropertyDouble("DisplaySize"));
_dataGrid.Columns.Add(column);
Вот как я привязываю DataSet с 10 строками в нем.
_dataGrid.ItemsSource = ds.Tables[0].DefaultView;
_dataGrid.DataContext = ds.Tables[0];
Не уверен, что могу сделать по-другому.