1000个组合框结合

时间:2012-06-25 05:45:59

标签: .net wpf performance xaml combobox

我有一个WPF表单,其中包含30x30网格,其中每个网格单元格为ComboBox。 ComboBox值和选定值绑定自DataContext。问题是它变得非常缓慢。我重写了表单,以便显示文本框而不是组合框(并且在鼠标输入时TextBox转换为ComboBox)并立即生效。

为什么ComboBoxes这么慢?有没有办法改善ComboBoxes的大规模绑定?

1 个答案:

答案 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;