似乎我无法在互联网上弄清楚这个问题,所以我问你们。我想知道在自定义Panel的度量方法中使用ItemsContainerGenerator与是否调用容器上的Recycle之间有什么区别。
我的猜测是,一旦调用方法GenerateNext,生成器会创建新容器并将它们连接到数据项,但生成器是否总是将项目连接到GenerateNext方法中的容器?总是将容器连接到我的意思,是否将已经生成/重新实现的容器链接到他们的数据项?
如果我通过调用recycle()方法开始回收容器会发生什么。那么生成器是否仍然总是将容器链接到项目?
我问这个是因为滚动性能取决于此。如果生成器始终将项目连接到容器,这意味着它将刷新DataContext / Binding并且滚动会稍微滞后。虽然如果使用循环方法,生成器会停止刷新Bindings,滚动会非常顺利地运行。
答案 0 :(得分:0)
当您使用回收虚拟化模式时,容器会被重用,因此它们也不必与原始数据对象连接。因此,如果您的容器模板包含将在数据(或其类型或属性)上重建其可视树的元素更改 - 它们将会。为了提高性能,我建议您尽可能独立于数据更改模板创建最小化可视树。您还可以修改ClearContainer方法以防止重置某些不依赖于数据的全局值:它可以是对某些大型父控件的设置,设置 - 通常不变但在更改时影响可视树的任何内容。