1

我们正在推出我们自己的特殊的基于 Items 的控件/面板组合,它不基于 ItemsControl 的子类(我们不能这样做的原因有很多,我不会在这里讨论)但我们的控件确实可以处理成千上万的数据项,所以我们想实现Visual虚拟化。

我们想知道的是,尝试将现有的 ItemContainerGenerator 类加入我们的设计或推出我们自己的虚拟化方法是否更有意义。

一方面,ItemContainerGenerator 已经处理了虚拟化并且非常高效,而且经过验证的代码几乎总是比从头开始更可取,但另一方面,ICG 是专门为使用而设计的,并且依赖于ItemsControl,同样,这个控件不是。另外,这是一个容器生成器,但在我们的例子中,我们只需要生成并布置一个特定的、已知的表示数据项的视觉效果。

现在,也许我过度简化了事情,但我所看到的只是需要确定哪些项目将在 ViewPort 中可见,确保创建、测量和排列这些项目的可视化表示,然后丢弃任何剩余的已经 -创造了视觉效果。为了跟踪这一切,似乎只需要一个简单的项目到可视化映射方案,可能需要在 DataItem 的 ViewModel 对象上使用 ItemVisual 附加属性。这样,当一个项目被移除/销毁时,我们只需检查是否存在现有的视觉效果,如果有,就对其进行核对。

也就是说,谁能想到我们不应该简单地推出自己的视觉虚拟化的原因?再一次,ICG 会这样做,但我想知道这是否将 Semi 带到商店获取鸡蛋。

4

0 回答 0