WPF DataGrid очень медленно обрабатывает

Я пробовал использовать как настроенный 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];

Не уверен, что могу сделать по-другому.

35
задан David Gunther 13 July 2011 в 19:44
поделиться