WPF VirtualizingStackPanel可提高性能

时间:2009-09-07 14:55:04

标签: wpf performance virtualization stackpanel

我想简单介绍如何为我的MVVM中的ItemsControl数据绑定ObservableCollection实现virtualizingstackpanel。

我在标签控件中为每个标签设置了ItemsControl个实例,当ItemsControl变大时,切换标签变得非常慢。

我可以做些什么来加速应用程序?

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

2 个答案:

答案 0 :(得分:50)

有两种技术可能会有很大帮助。 Bea Stolnitz在她的blog上很好地描述了这两个。

第一个是UI Virtualization 第二个是Data Virtualization

在UI虚拟化中,您可以使用VirtualizingStackPanel之类的东西来减少UI的绘制。

数据虚拟化确保当您只显示100时,不会将一百万个对象带入内存。

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

希望有所帮助

答案 1 :(得分:9)

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

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

....性能打击是在树的构建过程中。不幸的是,如果是 您正在使用典型的MVVM方法,并对ItemsSource进行绑定 TabControl的属性,每次必须重建整个树 选中一个标签项。这通常是非常昂贵的操作。 ....