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

DataGridTemplateColumn的CellEditingTemplate中控件无法更新数据源

WPF DataGrid模板列切换显示/编辑状态的绑定问题解决

场景说明

使用MVVM模式实现对话框,DataGrid绑定数据对象的ObservableCollection。数据对象包含DisplayedBarcode(自动读取的条码)、InputBarcode(手动输入的条码)两个字符串属性,需要根据布尔属性IsBarcodeEditable在同一列切换显示/编辑状态。

数据模型代码

public class DataObject : ViewModelBase
{
    #region Fields
    private string _barcode;
    private string _inputBarcode;
    #endregion

    #region Properties
    /// <summary>
    /// 标记条码字段是否可编辑
    /// </summary>
    public bool IsBarcodeEditable { get; set; }

    /// <summary>
    /// 用户手动输入的条码字符串
    /// </summary>
    public string InputBarcode
    {
        get { return _inputBarcode; }
        set
        {                
            if (_inputBarcode == value)
            {
                return;
            }
            _inputBarcode = value;
            OnPropertyChanged(nameof(InputBarcode));
        }
    }

    /// <summary>
    /// 自动读取的条码字符串
    /// </summary>
    public string DisplayedBarcode
    {
        get { return _barcode; }
        set
        {
            if (_barcode == value)
            {
                return;
            }
            _barcode = value;
            OnPropertyChanged(nameof(DisplayedBarcode));
        }
    }
    #endregion
}

遇到的问题

采用DataGridTemplateColumn的CellTemplate显示DisplayedBarcode,CellEditingTemplate绑定InputBarcode实现编辑,但当IsBarcodeEditable为true时,输入内容无法触发InputBarcode的setter方法。尝试设置UpdateSourceTrigger=PropertyChanged也无效。若将编辑用的TextBox移至CellTemplate中,绑定可正常更新,但无法满足显示DisplayedBarcode的需求。其他DataGridTextColumn的绑定均正常,排除MVVM通信问题。

排查结果与解决方案

经排查,问题根源是CellTemplate中的TextBox控件遮挡了CellEditingTemplate内的控件,导致编辑操作无法触发。可通过以下两种方式解决:

  • 修改CellTemplate中TextBox的属性:设置IsReadOnly=True、IsHitTestVisible=False,使其仅用于显示,不响应交互
  • 非编辑模式下改用TextBlock替代TextBox,避免遮挡编辑模板内的控件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:05:20