【问题标题】:WPF virtualization alternativeWPF 虚拟化替代方案
【发布时间】:2015-08-13 10:04:52
【问题描述】:

是否存在 WPF 虚拟化替代方案,其中生成所有项目的容器(因此评估绑定),但在不可见时折叠(因此没有渲染/布局开销)?

虚拟化意味着不为不在视图中的项目生成容器。但是,我需要一些额外的功能,这些功能由项目容器中的一些(附加的)依赖属性触发。我分析了禁用虚拟化的应用程序,发现主要瓶颈是布局传递和渲染。打开虚拟化后,性能显着提高,但正如预期的那样,绑定不会针对不在视图中的项目进行更新。

我的想法是有一个替代 ScrollViewer 自动折叠所有不在视图中的项目(并在视图中使它们再次可见),但仍将拇指显示在预期位置(并具有预期高度)。

有人知道现有的解决方案吗?

【问题讨论】:

  • 您需要哪些与依赖属性相关的功能?您拥有视图模型中的所有项目,您不能使用那里的对象来获得您想要的吗?
  • 我想在一些 GridView 组件中拥有该功能。它自动管理项目的分组和排序(不涉及 ViewModel),但是如果 ViewModel 中的某些属性发生更改,它不会更新分组/排序。我可以通过附加属性检测更改 - 但是,这仅在创建相应的单元格时才有效。

标签: wpf virtualization scrollviewer


【解决方案1】:

解决此问题的最佳方法是依赖 MVVM 模式。所有依赖项都将在模型/视图模型上进行管理,但不是在视图端

【讨论】:

  • 感谢您的意见。但是,我不得不不同意:当某些功能可以通过仅更改某些 WPF 组件的一种样式来“普遍”处理时 - 为什么我应该在所有消耗的 ViewModel 中执行 20 次?我认为这很容易出错。
  • 我不确定我是否明白你所说的 20 次。实际上,ViewModel 可以只继承另一个 ViewModel,因此您只需进行 1 处更改。推理它如何显示 VS 数据如何变化对我来说更容易出错。但我又猜想是因为我更习惯后者。
  • ViewModel 完全没有任何共同点,除了这些是使用某些(外部)GridView 组件呈现的对象列表。该组件已经支持分组/排序,但如果 ViewModel 的某些属性(或绑定到 GridView 的某些列的任何子项)发生更改,则不会更新此功能。所以继承并不是一个真正的选择......
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 2015-01-04
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多