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

WPF C#应用编辑DataGrid时停止运行问题求助

解决WPF Material Design DataGrid新增行后编辑触发停止模式的问题

嘿,我之前也踩过类似的坑!你这个情况基本是Material Design DataGrid在处理**新增空行(NewItemPlaceholder)**的编辑状态时出了问题,大概率是绑定、模板或者实体类的细节没处理到位,导致抛出未捕获的异常让程序进入停止模式。下面给你几个排查和解决的方向:

1. 确认绑定集合的类型

先检查你的Treatement(顺便提一句,是不是拼写错成Treatement了?应该是Treatment吧😉)集合是不是用的ObservableCollection<T>,而不是普通的List<T>。因为CanUserAddRows="True"时,WPF需要集合支持INotifyCollectionChanged来通知UI更新新增行的状态,普通List做不到这一点,很容易引发上下文异常。

2. 修复编辑模板的绑定问题

Material Design的可编辑DataGrid通常用DataGridTemplateColumn,新增行时默认是一个空的占位实例,这时候如果你的编辑控件(比如TextBox)绑定的属性是null,就会触发绑定失败的异常。给绑定加上FallbackValue和TargetNullValue就能避免这种情况:

<DataGridTemplateColumn Header="你的列名">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding YourProperty, FallbackValue='', TargetNullValue=''}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding YourProperty, FallbackValue='', TargetNullValue='', UpdateSourceTrigger=PropertyChanged}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

3. 确保实体类有默认无参构造函数

WPF在新增行时,会自动创建一个你的实体类的实例,如果你的实体类只有带参数的构造函数,没有无参构造,就会导致实例化失败,直接引发异常。给实体类加个无参构造就行:

public class YourTreatmentClass
{
    // 无参构造必须要有
    public YourTreatmentClass() { }

    // 你的其他属性和带参构造
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}

4. 捕获具体异常定位根源

程序进入停止模式肯定是有未处理的异常,你可以在Visual Studio里开启捕获所有CLR异常:

  • 点击顶部菜单的「调试」→「窗口」→「异常设置」
  • 勾选「Common Language Runtime Exceptions」前面的复选框

这样下次触发停止模式时,就能看到具体的异常信息(比如绑定失败、构造函数不存在等),这是最快定位问题的方法。

5. 更新Material Design Toolkit版本

如果你的Material Design in XAML Toolkit是比较老的版本,可能存在DataGrid新增行编辑的已知bug,尝试NuGet更新到最新稳定版,很多这类小问题都会被修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:03