编写具有列和行虚拟化的网格

时间:2011-09-16 16:57:44

标签: wpf grid virtualization

我需要编写一个类似excel的网格,它可以包含很多单元格(400x400)。所有列都具有相同的宽度,所有行的高度相同。每个单元格可以包含文本或为空,每个单元格可以包含和/或行列。我想这对Grid面板永远不会有效,我想我需要在列和行方向进行UI虚拟化。

所以我的第一次尝试是通过派生VirtualizingPanel并实施IScrollInfo来创建虚拟化网格。除了遇到问题外,这可能很容易成为解决方案:

要向IScrollInfo提供有关滚动大小和位置的相关信息,并且能够确定接下来需要使用ItemsContainerGenerator创建(实现)项目,我需要知道列索引,行indeox和每个子项(单元格)的columnspan。我能想到的唯一方法是使用附加属性。问题是:如果已经实现了包含它们的ItemContainer,我只能读取附加属性的值。所以我在这里抓到了22。要知道要实现什么,我需要实现所有项目。为IScrollInfo提供数据我需要实现所有项目。

所以看来我采用这种方法已经走到了尽头。

您是否知道如何实现这样的控件或知道如何解决上述问题?

1 个答案:

答案 0 :(得分:0)

让我觉得您可能不需要实现UI元素本身 - 您可以很容易地拥有DependencyObject派生的视图模型的集合,每个视图模型都设置了WidthProperty和HeightProperty(并且可能绑定到等效的Width和Height)可见单元格UI元素的属性,一旦创建它们。)

存储160,000(400x400)类实例应该不是问题,特别是如果您能够使用行和列索引集合。