0

我目前有一个从数据库绑定到 DataSet 的组合框。问题在于,当我想使用组合框显示数据集时,将完整的数据集加载到组合框大约需要 8 秒。想问一下是否有什么方法可以只显示comboBox中dataSet的前几个数据,这样会更快吗?

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

任何建议都会受到欢迎!:)

4

2 回答 2

0

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

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

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

如果您遇到下拉菜单由于显示项目的宽度而改变其宽度的问题,您可能希望使用以下样式绑定到组合框的宽度:

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

编辑:

感谢 morimer,我被指向以下博客,在那里我了解了更多关于虚拟化如何工作的信息。很好的参考!

于 2013-05-20T07:57:31.963 回答
0

直接回答您的问题 - 您需要实现数据或 UI 虚拟化(如 Sheep 在他的回答中提出的)。查看此答案以获取更多详细信息和解释:https ://stackoverflow.com/a/1453818/786055

但一般来说,使用 ComboBox 显示大量数据恕我直言,从可用性的角度来看并不是一个最佳决定。考虑改用自动完成文本框或类似的东西(如此处所述或类似的东西 - 有很多选项)

于 2013-05-20T08:43:43.247 回答