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

WPF DataGrid自动生成列Checkbox点击后数据源未实时更新如何解决

解决方案

不需要手动生成列,你已经在DataGrid上声明了AutoGeneratingColumn事件,直接在该事件中修改自动生成的复选框列的绑定更新触发时机即可:

  1. 在MainWindow的后台代码中添加dgvSystems_AutoGeneratingColumn的实现:
private void dgvSystems_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    // 识别自动生成的复选框列
    if (e.Column is DataGridCheckBoxColumn checkBoxColumn)
    {
        var binding = checkBoxColumn.Binding as Binding;
        if (binding != null)
        {
            // 将绑定更新源的时机从默认的LostFocus改为属性变更时立即更新
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        }
    }
    // 也可以直接在这里统一设置列宽,不需要在Loaded事件中遍历列
    e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
}

原理说明

WPF的DataGrid自动生成列时,为了减少频繁回写数据源的性能开销,所有列的绑定默认将UpdateSourceTrigger设为LostFocus,即只有当前单元格失去焦点时才会把修改同步到数据源,复选框列也遵循这个默认规则。修改为PropertyChanged后,只要复选框的选中状态发生变化,就会立即同步到绑定的数据源属性,触发你写在IsEnabled属性set方法中的启停逻辑。
修改完成后无需调整其他代码,点击复选框就会立刻触发日志输出,不需要等待DataGrid失去焦点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:39:01