WPF VirtualizingStackPanel可提高性能

blu*_*bit 34 wpf virtualization performance stackpanel

我想简单描述如何为我的MVVM中的数据ItemsControl绑定实现virtualizingstackpanel ObservableCollection.

我有一个ItemsControl选项卡控件中的每个选项卡的实例,并且当ItemsControl变大时,切换选项卡变得非常慢.

我该怎么做才能加快应用程序的速度?

我打开了一个WPF分析器,发现每个选项卡的ItemsControl中显示的每个元素(这是一个自定义用户控件)都有自己的ContentPresenter.所以我基本上有100个内容演示者都在我ObservableCollection的MVVM中运行100个项目.这是正确的吗?我该如何优化?

Mik*_*Two 51

有两种技术可能是一个很大的帮助.Bea Stolnitz在她的博客上对这两个都进行了很好的描述.

第一个是UI虚拟化 ,第二个是数据虚拟化

在UI虚拟化中,您使用VirtualizingStackPanel之类的东西来使UI绘制更少的东西.

数据虚拟化确保您在仅显示100时不会将一百万个对象带入内存.

因此,UI虚拟化最大限度地减少了绘制的内容,数据虚拟化最大限度地减少了可以绘制的内容.

希望有所帮助


小智 9

我使用TabControl和DataGrid在WPF中遇到了同样的问题.通过增加DataGrid元素大小,切换选项卡变得非常慢!之后,我发现这篇帖子正在读Bea Stolnitz的博客,就像之前的答案一样.这给了我一个google"wpf tabcontrol VirtualizingStackPanel"的提示,它给了我DrWPF的链接:http://groups.google.com/group/wpf-disciples/browse_thread/thread/6f3531a1720252dd

他准确描述了问题并给出了解决方案:-))

....在树木建造过程中,性能得到了打击.遗憾的是,如果
您使用典型的MVVM方法
并对TabControl 的ItemsSource 属性进行绑定,则每次
选择选项卡项时都必须重建整个树.这通常是非常昂贵的操作.....