如何加快向WPF网格添加控件的速度?

时间:2009-09-28 21:50:23

标签: wpf performance grid

对于个人项目,我需要根据可变大小数组的内容动态填充网格。我使用下面的代码来执行此操作,并且它运行良好,除了当数组变大(如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);
            }
        }

2 个答案:

答案 0 :(得分:1)

不可否认,我仍然在用WPF弄湿我的排骨,但是我会在这里说出来并试图添加40,000个控件是你真正的瓶颈;而不是你如何添加控件。

即使你的XAML中有所有40,000个控件都是硬编码的,你仍然会有20秒的加载时间。

这是世界上最大的数据录入表格或巨大的扫雷车牌照; - )

答案 1 :(得分:-1)

你试过围绕你的循环:

GridView.BeginUpdate();

// add items

GridView.EndUpdate();