我目前有一个comboBox,它从数据库绑定到DataSet。它的问题是当我想使用comboBox显示dataSet时,它需要大约8秒才能将完整的dataSet加载到comboBox中。想询问是否有任何方法只显示comboBox中dataSet的前几个数据,以便它更快?
我目前正在使用另一个线程将数据加载到comboBox中,并使用DisplayMemberPath将dataSet的内容显示到comboBox中。
欢迎任何建议! :)
答案 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或类似的东西 - 有很多选项)