提高WPF DataGrid的性能

Kis*_*hor 31 c# wpf datagrid wpfdatagrid

在我的.NET 3.5 WPF应用程序中,我有一个WPF DataGrid将填充500列和50行.在滚动时,或者当我DataGrid.Items.Refresh()选择行或选择行时,App的性能非常差.

实际上应用程序将花费大约20秒来更新布局.Layout_Updated()事件将在20秒后触发.

如果我将列减少到50或更少,App将会非常敏感.根据我的发现,性能与列数直接相关.

如何提高DataGrid性能?

Ala*_*lan 75

您可以使用几个选项来帮助您使用DataGrid对象

EnableColumnVirtualization = true
EnableRowVirtualization = true
Run Code Online (Sandbox Code Playgroud)

这两个是我认为可能有帮助的主要因素.接下来尝试使您的绑定异步

ItemsSource="{Binding MyStuff, IsAsync=True}"
Run Code Online (Sandbox Code Playgroud)

最后,我听说设置最大高度和宽度可以帮助,即使它超过最大屏幕尺寸,但我自己没有注意到差异(声称与自动尺寸测量有关)

MaxWidth="2560"
MaxHeight="1600"
Run Code Online (Sandbox Code Playgroud)

也从来不把DataGridScrollViewer,因为你会失去基本的虚拟化.如果这有帮助,请告诉我!

  • 惊人.我想知道为什么其他线程从未谈过这个启用行和列虚拟化.万分感谢. (4认同)
  • 我也会让你的列固定宽度. (2认同)

小智 5

检查是否ScrollViewer.CanContentScroll设置了属性False。将此属性设置为false将以某种方式禁用虚拟化,这会降低数据网格的性能。有关更多说明,请参见此CanContentScroll