Для личного проекта мне нужно динамически заполнить сетку, основываясь на содержимом массива переменного размера. Я использую код в соответствии с тем, что ниже для этого, и он работает хорошо, за исключением того, что, когда массив растет (как в 200 х 200 или более), он становится медленным (20+ секунд для заполнения). Похоже, что кнопки быстрого запуска быстро, но добавление в сетку происходит медленно.
Я делаю что-то неправильно? Можно ли что-то сделать, чтобы ускорить процесс, используя обычную сетку WPF? Должен ли я смотреть на другой контроль? Спасибо заранее за любые предложения.Как я могу ускорить добавление элементов управления в сетку WPF?
int columns=200;
int rows=200;
var width = new GridLength(30);
var height = new GridLength(25);
for (int column = 0; column < columns; column++)
{
var columnDefinition = new ColumnDefinition();
columnDefinition.Width = width;
this.TestGrid.ColumnDefinitions.Add(columnDefinition);
}
for (int row = 0; row < rows; row++)
{
var rowDefinition = new RowDefinition();
rowDefinition.Height = height;
this.TestGrid.RowDefinitions.Add(rowDefinition);
}
for (int column = 0; column < columns; column++)
{
for (int row = 0; row < rows; row++)
{
var button = new Button();
button.Content = row.ToString() + ", " + column.ToString();
Grid.SetRow(button, row);
Grid.SetColumn(button, column);
this.TestGrid.Children.Add(button);
}
}
Это то, чего я тоже боюсь, но я надеялся, что, возможно, был волшебный трюк, о котором я не знал ... И я не строю совет чемпионата мира по шахматам, но, по сути, дублирую интерфейс Excel. – Mathias
Спасибо, миллион! Ваш ответ заставил меня задуматься над этой проблемой и понять, что я могу полностью избежать проблемы, изменив свой дизайн. – Mathias
Также убедитесь, что вы посмотрите на виртуализацию строк и столбцов. Это связано с тем, что количество созданных элементов WPF низкое, даже если вы привязываетесь к множеству элементов. –