在WPF应用程序开发过程中,大数据量的数据展现通常都要考虑性能问题。有下面一种常见的情况:原始数据源数据量很大,但是某一时刻数据容器中的可见元素个数是有限的,剩余大多数元素都处于不可见状态,如果一次性将所有的数据元素都渲染出来则会非常的消耗性能。因而可以考虑只渲染当前可视区域内的元素,当可视区域内的元素需要发生改变时,再渲染即将展现的元素,最后将不再需要展现的元素清除掉,这样可以大大提高性能。
对于ListBox,在XAML Template中加入以下属性
ScrollViewer.CanContentScroll = "True" // 设置内容逻辑滚动
VirtualizingStackPanel.IsVirtualizing = "True" // 开启虚拟化
VirtualizingStackPanel.VirtualizationMode = "Standard"
https://msdn.microsoft.com/zh-cn/library/system.windows.controls.virtualizingpanel.aspx
WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)
WPF 虚拟化 VirtualizingWrapPanel 和 VirtualLizingTilePanel