Combobox虚拟化问题

时间:2014-11-14 05:48:24

标签: c# wpf combobox wpf-controls data-virtualization

我有一个奇怪的问题,就像在组合框样式中,当我使虚拟化真实时,我有一个选中的Combobox来检查组合框项目中的所有复选框。

在ItemsPanel属性中,我使用VirtualizingStackPanel做了一些自定义样式,如下所示

<Setter Property="ItemsPanel">
        <Setter.Value>
          <ItemsPanelTemplate>
            <VirtualizingStackPanel IsItemsHost="True"
                                    IsVirtualizing="True"
                                    VirtualizationMode="Recycling" />
          </ItemsPanelTemplate>
        </Setter.Value>
      </Setter>

但在滚动视图之前和之后,它会有所不同。

例如,在这里,我尝试在向下滚动项目面板后获得组合框的第一个项目

ComboBoxItem cmbItem = ComboBox1.ItemContainerGenerator.ContainerFromItem(ComboBox1.Items[0]) as ComboBoxItem;

但是,我在这里得到的只是NULL。

那么无论如何我们可以使用虚拟化来实现这一目标吗? (我知道它已经虚拟化了!)。或者我们应该摆脱虚拟化并考虑另一种解决方案。我们看到没有虚拟化特性,组合框加载速度很慢。

有什么想法吗?

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

NULL直接是虚拟化的结果。它是虚拟化/回收的ComboBoxItem实例。只有您的集合中的可见项将分配ComboBoxItem,因此如果您在任何不可见的项目上请求ComboBoxItem,您将返回NULL。