我正在使用数据网格来显示包含约 50 行的数据表。由于某种原因,网格的渲染非常慢,我需要大约 2 秒才能显示带有数据的网格。例如,如果我使用 ListBox 或 ListView,渲染速度会更快,这意味着根本没有延迟。 我想要显示的数据表有 20 列,但如果我只想显示一列,它对渲染性能没有影响。
这是我用来显示网格的代码:
<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="True" />
如果我将 autogeneratecolumns 设置为 false(网格渲染行但不渲染列),网格仍然需要 ~2 秒来渲染
<DataGrid ItemsSource="{Binding Data}" AutoGenerateColumns="False" />
如果我使用列表框,它根本没有延迟(但我需要编写一个通用模板来显示所有列),ListView 也根本没有延迟
<ListBox ItemsSource="{Binding Data}"/>
我不知道为什么网格那么慢。我也尝试设置 VirtualizingPanel.IsVirtualizing="True" 但它对性能没有影响。
有什么想法吗?
KR曼努埃尔
所有 DataGrid 都慢得可怕(即使是你付费的)。您需要开启虚拟化。
VirtualizingStackPanel.IsVirtualizing = true
以及VirtualizingStackPanel.VirtualizationMode = recycling
。如果你有很多列,或者开始做模板,它会再次变慢。你真的对此无能为力。我已经尝试了所有的 DataGrid(同步融合、基础设施等)。他们都很慢。
使用 ObservableCollection 作为数据源