You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF如何让DataGrid的TemplateColumn内ComboBox随DataGrid加载初始化

你遇到的卡顿并非ComboBox数据源加载或者渲染导致,从调试日志可以判断,是首次点击ComboBox时触发了WPF无障碍辅助功能相关的dll动态加载,才出现数秒卡顿,你的5条数据量完全不需要用到UI虚拟化,所以之前的优化方案不生效。

以下是可行的解决方案:

  • 方案1:预加载辅助功能相关依赖
    在窗口构造函数InitializeComponent执行后,主动触发相关程序集的加载,避免用户交互时才加载:
public TestWindow()
{
    InitializeComponent();
    // 新增以下两行预加载依赖
    _ = typeof(System.Windows.Automation.Peers.ComboBoxAutomationPeer);
    System.Reflection.Assembly.Load("Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
    
    var _context = new TestContext();
    DataContext = _context;
    TestDataGrid.ItemsSource = _context.Atms;
}

这段代码会在窗口初始化阶段就完成相关程序集的加载,用户点击ComboBox时不会再触发加载逻辑,卡顿自然消失。

  • 方案2:禁用WPF辅助功能(如果你的程序不需要适配读屏等无障碍功能)
    在项目的App.config文件中加入以下配置,直接禁用UI自动化相关逻辑,不会再加载对应的dll:
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Automation.DisableUIAutomation=true" />
  </runtime>
</configuration>

如果是.NET Core 3.x版本,上述配置不生效的话,可以换成以下配置:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=true;Switch.UseLegacyAccessibilityFeatures.2=true;Switch.UseLegacyAccessibilityFeatures.3=true;Switch.UseLegacyAccessibilityFeatures.4=true" />
  </runtime>
</configuration>
  • 方案3:优化ComboBox绑定逻辑
    你当前用RelativeSource找Window级的DataContext,每次模板解析时都要遍历视觉树,你可以把数据源提前封装为静态资源提升解析效率:
    首先在Window的资源块中声明集合源:
<Window.Resources>
    <CollectionViewSource x:Key="DriversCollection" Source="{Binding Drivers}" />
</Window.Resources>

然后修改ComboBox的ItemsSource绑定:

<ComboBox ItemsSource="{Binding Source={StaticResource DriversCollection}}" 
          SelectedValuePath="Initials" 
          DisplayMemberPath="Initials"
          SelectedValue="{Binding Initials, Mode=TwoWay}">
    <!-- 其余配置保持不变 -->
</ComboBox>

内容的提问来源于stack exchange,提问作者eleviness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:06:03