我有一个WPF表单,其中包含30x30网格,其中每个网格单元格为ComboBox
。 ComboBox值和选定值绑定自DataContext
。问题是它变得非常缓慢。我重写了表单,以便显示文本框而不是组合框(并且在鼠标输入时TextBox
转换为ComboBox
)并立即生效。
为什么ComboBoxes这么慢?有没有办法改善ComboBoxes的大规模绑定?
答案 0 :(得分:5)
ComboBox
不使用虚拟化(VirtualizingStackPanel
),您可以通过非常简单的方式更改控件使用的面板:
<ComboBox ItemsSource="{Binding}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
参考:Improving Combobox Performance through UI Virtualization
如果ComboBox
有数千个项目,那么在提高性能方面有很大帮助,不知道在你的情况下会有多大帮助,因为有1000个组合框用于UI。
您还可以尝试将这些组合框放在虚拟化面板中(例如ListBox
或直接使用VirtualizedStackpanel
)。
您可以尝试的另一件事是使用IsAsync
属性使ComboBox
ItemSource
绑定异步。
我希望您使用ObservableCollection
作为ItemSource
;