我想要一个关于如何为 ItemsControl
实现虚拟化堆栈面板的简单描述。数据绑定(bind)到 ObservableCollection
在我的 MVVM 中。
我有一个 ItemsControl
选项卡控件中每个选项卡的实例,当 ItemsControl
时切换选项卡变得非常慢变大。
我可以做些什么来加快应用程序的速度?
我打开了一个 WPF 分析器,看到每个选项卡的 ItemsControl 中显示的每个元素(这是一个自定义用户控件)都有自己的 ContentPresenter
.因此,我的 ObservableCollection
中基本上有 100 位内容演示者都在为 100 个项目运行。在 MVVM 中。这是正确的吗?我该如何优化?
最佳答案
有两种技术可能会有很大帮助。 Bea Stolnitz 在她的 blog 上对这两者都进行了很好的描述。 .
第一个是UI Virtualization
第二个是Data Virtualization
在 UI 虚拟化中,您使用诸如 VirtualizingStackPanel 之类的东西来使 UI 绘制更少的东西。
数据虚拟化可确保当您只显示 100 个对象时不会将 100 万个对象带入内存。
因此,UI 虚拟化最大限度地减少了绘制的事物的数量,而数据虚拟化则最大限度地减少了可以绘制的事物的数量。
希望有帮助
关于WPF VirtualizingStackPanel 以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1389769/