我目前有一个从数据库绑定到 DataSet 的组合框。问题在于,当我想使用组合框显示数据集时,将完整的数据集加载到组合框大约需要 8 秒。想问一下是否有什么方法可以只显示comboBox中dataSet的前几个数据,这样会更快吗?
我目前正在使用另一个线程将数据加载到组合框中,并使用 DisplayMemberPath 将数据集的内容显示到组合框中。
任何建议都会受到欢迎!:)
我目前有一个从数据库绑定到 DataSet 的组合框。问题在于,当我想使用组合框显示数据集时,将完整的数据集加载到组合框大约需要 8 秒。想问一下是否有什么方法可以只显示comboBox中dataSet的前几个数据,这样会更快吗?
我目前正在使用另一个线程将数据加载到组合框中,并使用 DisplayMemberPath 将数据集的内容显示到组合框中。
任何建议都会受到欢迎!:)
嗨,这个问题的解决方案实际上很简单。您所要做的就是将以下样式添加到您的 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,我被指向以下博客,在那里我了解了更多关于虚拟化如何工作的信息。很好的参考!
直接回答您的问题 - 您需要实现数据或 UI 虚拟化(如 Sheep 在他的回答中提出的)。查看此答案以获取更多详细信息和解释:https ://stackoverflow.com/a/1453818/786055
但一般来说,使用 ComboBox 显示大量数据恕我直言,从可用性的角度来看并不是一个最佳决定。考虑改用自动完成文本框或类似的东西(如此处所述或类似的东西 - 有很多选项)