对于个人项目,我需要根据可变大小数组的内容动态填充网格。我使用下面的代码来执行此操作,并且它运行良好,除了当数组变大(如200 x 200或更多)时,它变得缓慢(填充20+秒)。看起来像实例化按钮很快,但添加到网格很慢 我做错了吗?有什么办法可以使用普通的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);
}
}
答案 0 :(得分:1)
不可否认,我仍然在用WPF弄湿我的排骨,但是我会在这里说出来并试图添加40,000个控件是你真正的瓶颈;而不是你如何添加控件。
即使你的XAML中有所有40,000个控件都是硬编码的,你仍然会有20秒的加载时间。
这是世界上最大的数据录入表格或巨大的扫雷车牌照; - )
答案 1 :(得分:-1)
你试过围绕你的循环:
GridView.BeginUpdate();
// add items
GridView.EndUpdate();