【问题标题】:WPF VirtualizingStackPanel for increased performanceWPF VirtualizingStackPanel 以提高性能
【发布时间】:2010-11-26 06:17:10
【问题描述】:

我想简单描述一下如何为ItemsControl 实现虚拟化堆栈面板,该ItemsControl 数据绑定到我的 MVVM 中的ObservableCollection

标签控件中的每个标签都有一个ItemsControl 实例,当ItemsControl 变大时,切换标签变得非常慢。

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

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

【问题讨论】:

    标签: wpf performance virtualization stackpanel


    【解决方案1】:

    有两种技术可能会有很大帮助。 Bea Stolnitz 在她的blog 上对他们俩都进行了很好的描述。

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

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

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

    因此,UI 虚拟化将绘制的事物数量降至最低,而数据虚拟化将可绘制的事物数量降至最低。

    希望有帮助

    【讨论】:

    【解决方案2】:

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

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

    ....性能命中是在树的构建过程中。不幸的是,如果
    您正在使用带有 ItemsSource 绑定的典型 MVVM 方法
    TabControl 的属性,每次都必须重建整个树
    一个选项卡项目被选中。这通常是一项非常昂贵的操作。 ....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2011-03-31
      • 2011-03-23
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多