在我的wpf应用程序中,我有这个问题。此组合框的项目源包含20000个元素
<ComboBox Height="30" ItemsSource="{Binding MyTheme}" DisplayMemberPath="theme_libelle" />
问题是当我选择它时,即使项目源是一个简单的字符串列表,也需要花费很多时间才能打开。
我尝试使用其面板的虚拟化,但我得到了相同的结果。当我用WinForms ComboBox
替换它时,我得到了一个完美的结果:它需要一秒钟才能打开。
<WindowsFormsHost >
<WinForms:ComboBox DataSource="MyTheme" SelectedIndex="0"></WinForms:ComboBox>
</WindowsFormsHost>
我需要知道如何实现一个继承自winforms combobox
的自定义组合框,并实现所需的依赖属性和用于绑定的方法WPF ComboBox
任何建议?
答案 0 :(得分:3)
当我复制您的条件并将20000个项目添加到组合框时,打开组合框大约需要27秒。
使用如下所示的VirtualizingStackPanel
时,组合框会在不到1秒的时间内打开。
<ComboBox ItemsSource="{Binding LotsOfItems}"
MinWidth="100">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
正如this answer中所述,如果虚拟化面板无法正常工作,则您运行的环境中很可能存在问题。