在 WPF && winforms 应用程序中自定义组合框

Customizing a combobox in WPF && winforms application

在我的 wpf 应用程序中我遇到了这个问题。此组合框的项目源包含 20000 个元素

 <ComboBox   Height="30" ItemsSource="{Binding MyTheme}" DisplayMemberPath="theme_libelle" />

问题是当我 select 它时,即使项目源是一个简单的字符串列表,打开它也需要很多时间。

我尝试使用其面板的虚拟化,但得到了相同的结果。当我用 WinForms ComboBox 替换它时,我得到了一个完美的结果:打开它需要一秒钟。

<WindowsFormsHost >
<WinForms:ComboBox DataSource="MyTheme" SelectedIndex="0"></WinForms:ComboBox>
    </WindowsFormsHost>

我需要知道如何实现自定义的组合框,它继承自 winforms combobox 并实现绑定中所需的依赖属性和方法作为 WPF ComboBox

有什么建议吗?

当我复制您的条件并将 20000 个项目添加到组合框时,打开组合框大约需要 27 秒。

当使用如下所示的 VirtualizingStackPanel 时,组合框会在不到 1 秒的时间内打开。

<ComboBox ItemsSource="{Binding LotsOfItems}"
          MinWidth="100">
   <ComboBox.ItemsPanel>
      <ItemsPanelTemplate>
         <VirtualizingStackPanel />
      </ItemsPanelTemplate>
   </ComboBox.ItemsPanel>
</ComboBox>

所述,如果虚拟化面板不工作,很可能是您所在的环境有问题运行。