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

DataGrid单元格编辑后无法访问CellEditEnding事件参数中的Text属性问题咨询

DataGrid单元格编辑后无法访问CellEditEnding事件参数中的Text属性问题咨询

兄弟我太懂你这种调试时的困惑了!之前我也盯着调试器里的属性一脸懵,明明看到有Text,写代码就是调不出来,简直挠头😅

先给你说清楚原因:你在调试器里看到的Text属性,根本不是CellEditEndingEventArgs的属性,而是单元格编辑时临时生成的编辑控件(比如TextBox)的属性!调试器会把事件参数关联的内部对象属性也显示出来,但这些属性并没有暴露给我们的代码,所以直接访问自然会报错。

至于FrameworkElement里没有Text属性也很正常——DataGrid的单元格编辑控件可不是只有TextBox一种,还可能是ComboBox、DatePicker甚至自定义控件,所以事件参数不可能统一提供一个Text属性,得根据实际的编辑控件类型来处理。

给你两个靠谱的解决方案:

方案一:直接获取编辑控件的对应值

通过事件参数的e.EditingElement拿到当前正在使用的编辑控件,然后转换成对应的类型再取值:

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    // 如果是TextBox类型的编辑控件
    if (e.EditingElement is TextBox editTextBox)
    {
        string editedText = editTextBox.Text;
        // 这里写你的业务逻辑
    }
    // 如果是ComboBox的话
    else if (e.EditingElement is ComboBox editComboBox)
    {
        var selectedValue = editComboBox.SelectedValue;
        // 处理下拉框的选中值
    }
}

方案二:从绑定的数据源直接取值

只要你的DataGrid是用数据绑定(默认是TwoWay模式),编辑完成后值会自动同步到数据源对象里,所以直接从行对应的Item里取就行:

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    // 把Item转换成你的数据模型类型
    var targetItem = e.Row.Item as YourDataModel;
    if (targetItem != null)
    {
        // 直接访问模型里对应的属性
        string latestValue = targetItem.YourTargetProperty;
    }
}

以后再遇到调试器里能看到但代码里访问不了的属性,先看看是不是关联对象的属性,别被调试器的显示给误导啦!

备注:内容来源于stack exchange,提问作者sJames

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:42:36