and*_*dyp 24 c# wpf performance datagrid
我在(WPF Toolkit)DataGrid中遇到了性能问题.它包含大约1.000行(只有8列),滚动速度非常慢且滞后.此外,包含DataGrid的Window的初始加载需要5-10秒.
我做了一些研究(使用谷歌和StackOverflow)但除了打开UI虚拟化的建议之外找不到任何东西.但即使在明确表示滚动仍然非常缓慢之后.
我的DataGrid绑定到ICollectionView/CollectionViewSource.它是在XAML中定义的(列是明确定义的,不是自动生成的):
<tk:DataGrid x:Name="dataGrid"
ItemsSource="{Binding Path=Bookings}"
AutoGenerateColumns="False"
Grid.Row="1"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
...
</tk:DataGrid>
Run Code Online (Sandbox Code Playgroud)
整个Window的DataContext设置为包含DataGrid绑定的ICollectionView的类的实例.
我发现的每篇博客或论坛帖子都赞扬了DataGrid的表现,所以我显然做了一些严重的错误.由于我对WPF很新,特别是对于DataGrid,我不知道如何改进它.有人对我有什么建议吗?您对DataGrid的体验如何?我究竟做错了什么?
编辑:只需按照此问题的建议将所有列的宽度设置为"自动".这并没有改变糟糕的滚动性能.另外,我没有使用DataGridTemplateColumns(只是一些DataGridTextColumns和两个DataGridComboBoxColumns).
Edit2:我用Snoop查看我的应用程序.我所看到的表明虚拟化确实在起作用(只有19行,而不是一千行).但每行包含52个元素,因此这些元素总计超过千个元素.可能是一个问题?
非常感谢!
小智 18
DataGrid有一个Attached属性ScrollViewer.CanContentScroll,用于管理此行为.要获得平滑滚动,您需要将其设置为False.