我曾尝试使用自定义的 DataGrid,也试过 WPF 自带的 DataGrid。无论是手动填充还是通过绑定数据,两种情况下都很慢。
我的场景是用户点击按钮后,会出现一个包含相应数据的 DataGrid。目前我处于概念验证模式,只使用示例数据。我有一个包含 10 行数据的表格 DataSet。
如果我在点击按钮时不将任何数据附加到 DataGrid 上,则空的 DataGrid 几乎瞬间显示,用户无法察觉到延迟。但是一旦添加了10行具有6个列的数据,延迟就会约为2秒钟,对用户来说非常明显。
我甚至试图填充空数据,只是为了让空的网格出现,但速度同样很慢。
for (int i = 0; i < 10; i++)
_dataGrid.Items.Add("");
我在点击按钮后设置了一个计时器来计算从点击到执行所有代码以绘制DataGrid所需的时间,大约为20毫秒,因此代码执行非常快,但是屏幕上存在很大的延迟。我尝试了GridView,它在屏幕上呈现得更快。
我听说过在复杂场景下使用1000多行时DataGrid绘制速度慢的各种报道,但这是最简单的情况,只有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);
以下是我如何绑定含有10行数据的DataSet。
_dataGrid.ItemsSource = ds.Tables[0].DefaultView;
_dataGrid.DataContext = ds.Tables[0];
我不确定我能做些什么不同的事情。