如何让comboBox显示绑定数据的一部分

时间:2013-05-20 07:09:36

标签: c# wpf xaml visual-studio-2012

我目前有一个comboBox,它从数据库绑定到DataSet。它的问题是当我想使用comboBox显示dataSet时,它需要大约8秒才能将完整的dataSet加载到comboBox中。想询问是否有任何方法只显示comboBox中dataSet的前几个数据,以便它更快?

我目前正在使用另一个线程将数据加载到comboBox中,并使用DisplayMemberPath将dataSet的内容显示到comboBox中。

欢迎任何建议! :)

2 个答案:

答案 0 :(得分:0)

这个问题的解决方案实际上非常简单。您所要做的就是将以下样式添加到您的xaml代码中:

<Style TargetType="ComboBox">
    <Setter Property="ItemsPanel">
      <Setter.Value>
        <ItemsPanelTemplate>
          <VirtualizingStackPanel/>
        </ItemsPanelTemplate>
      </Setter.Value>
    </Setter>
  </Style>

这里的代码将使用VirtualizingStackPanel,它计算可见项目的数量,并仅为可见项目创建视觉效果!因此,当用户想要显示组合框时,下拉菜单会在用户打开时立即显示。

如果由于显示的项目宽度而导致下拉列表更改宽度的问题,您可能希望使用以下样式绑定到comboBox的宽度:

            </Style>
            <Style TargetType="{x:Type Popup}">
                <Setter Property="Width" Value="{Binding ElementName=comboBoxName, Path=ActualWidth}"/>
            </Style>

修改

对于morimer来说,我被指向了以下blog,其中我更多地了解了虚拟化的工作原理。很好的参考!

答案 1 :(得分:0)

直接回答您的问题 - 您需要实施数据或UI虚拟化(就像他在回答中提出的绵羊一样)。请查看此答案以获取更多详细信息和说明:https://stackoverflow.com/a/1453818/786055

但一般来说,使用ComboBox显示大量数据集IMHO从可用性的角度来看并不是最好的决定。考虑使用自动填充文本框或类似的东西(如described here或类似的东西 - 有很多选项)