我有一个DataGrid,它将DataTable设置为ItemsSource。 DataTable拥有24列和~1600行(实际上我将不得不在以后加载更多行,但是现在这很麻烦)。
尽管将列和行的虚拟化设置为活动状态,但DataGrid大约需要30秒才能显示这1600行。 在那之后,垂直滚动工作正常,水平延迟,但你会反过来预期。
如果我运行内存分析器,我可以验证应用程序使用的大部分内存来自DataGridCells,Borders,ContentPresenters和Textblocks。对我来说,这表明网格没有正确虚拟化其行。
任何人都可以确认DataGrid的虚拟化存在问题吗?或者在实施这种控制时是否存在某种臭名昭着的陷阱?
期待任何形式的意见/建议。谢谢:))
答案 0 :(得分:5)
我已经解决了这个问题。 我的DataGrid坐在ScrollViewer中,它可以无限延伸。所以它被欺骗了,认为一切都是可见的,这就是为什么它不会虚拟化它的项目。 我删除了ScrollViewer(无论如何,DataGrid都有自己的滚动条),它现在可以完美运行。
答案 1 :(得分:1)
修改
作为额外的建议,我建议您考虑一下您的方法。是否真的有必要向DataGrid
添加1.6k +项目?也许您应该考虑延迟加载。