我们正在推出我们自己的特殊的基于项目的控件/面板组合,它不是基于ItemsControl的子类(有很多原因导致我们不能这样做,我不会在这里讨论)但是我们的控件确实可以处理成千上万的数据项,因此我们希望实现Visual
虚拟化。
我们想知道的是,尝试将现有的ItemContainerGenerator类放入我们的设计或推出自己的虚拟化方法更有意义。
一方面,ItemContainerGenerator已经处理了虚拟化并且非常高效,并且从头开始,经过验证的代码几乎总是优先考虑,但另一方面,ICG专门设计用于并依赖于ItemsControl的功能,再次,这个控件不是。另外,这是一个容器生成器,但在我们的例子中,我们只需要生成并布置一个代表数据项的特定的已知视觉效果。
现在,也许我过度简化了事情,但我所看到的是需要确定哪些项目在ViewPort中可见,确保创建,测量和排列这些项目的可视化表示,然后丢弃任何左边的项目 - 已经创建的视觉效果。为了跟踪所有这一切,似乎只需要一个简单的项目到视觉映射方案,也许在DataItem的ViewModel对象上有一个ItemVisual附加属性。这样当一个项目被删除/销毁时,我们只检查是否存在现有的视觉效果,如果是,则核对它。
那就是说,有人能想到我们不应该简单地推出自己的视觉虚拟化的原因吗?再一次,ICG就是这样做的,但我想知道是不是要把半食品带到商店去买蛋。