我有一个 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
;