我有一个 WPF 表单,其中包含 30x30 网格,其中每个网格单元都是ComboBox. ComboBox 值和选定值绑定自DataContext. 问题是它运行得很慢。我重新设计了表单,使其显示文本框而不是组合框(并在鼠标输入时TextBox转换为ComboBox),并且现在可以立即工作。
为什么组合框这么慢?有什么方法可以改进 ComboBox 的大规模绑定?
我有一个 WPF 表单,其中包含 30x30 网格,其中每个网格单元都是ComboBox. ComboBox 值和选定值绑定自DataContext. 问题是它运行得很慢。我重新设计了表单,使其显示文本框而不是组合框(并在鼠标输入时TextBox转换为ComboBox),并且现在可以立即工作。
为什么组合框这么慢?有什么方法可以改进 ComboBox 的大规模绑定?
ComboBox默认情况下不使用虚拟化(VirtualizingStackPanel),您可以通过非常简单的方式更改控件使用的面板:
<ComboBox ItemsSource="{Binding}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
如果 a 有数千个项目,这对提高性能ComboBox有很大帮助,但不确定它对您的情况有多大帮助,因为拥有 1000 个组合框对 UI 来说非常重要。
您也可以尝试将这些组合框放在虚拟化面板中(如ListBox或直接使用VirtualizedStackpanel)。
您可以尝试的另一件事是使用属性使您的ComboBox ItemSource绑定异步。IsAsync
我希望你使用ObservableCollection你的ItemSource;