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

WPF DataGrid未失焦删除新增项时恢复新增模板行方法

WPF DataGrid 未完成编辑删除新增行导致新增模板行消失问题

前言:暂未找到可精准描述该问题的合适标题,若有更优表述欢迎调整。

问题描述

DataGrid控件存在如下异常表现:当DataGrid设置CanUserAddRows属性为True时,控件末尾默认会显示供用户新增条目的空白模板行,但如果用户通过该模板行创建新条目后,在该行从未失去焦点、未完成编辑提交的情况下就删除该条目,控件将不会生成新的新增模板行。

复现实例

界面XAML代码如下:

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <DataGrid CanUserAddRows="True" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Width="50" Binding="{Binding Name}"/>
            <DataGridTextColumn Width="50" Binding="{Binding Desc}"/>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Width="30" Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource AncestorType=Window}}" CommandParameter="{Binding}"></Button>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>

上述界面基于MVVM模式实现,DataGrid的ItemsSource绑定到Item类型的ObservableCollection集合,设置CanUserAddRows为True显示空白新增行,同时在行内放置删除按钮,点击后执行ViewModel中的删除命令,核心逻辑如下:

public void ExecuteDelete(object obj)
{
    if (obj is Item item)
    {
        Items.Remove(item);
    }
}

测试验证结果:

  • 对于集合中已存在的持久化条目,删除按钮功能运行正常
  • 如果用户点击模板行创建新条目后,未切换焦点使该行退出编辑状态,就直接点击该行的删除按钮,条目删除后不会生成新的新增模板行
  • 只有删除前该行已失去焦点、完成编辑提交,删除后才会正常生成新的模板行

现象说明

复现操作按顺序对应如下截图:

  • 初始状态下控件存在空白新增模板行
    空白新增行
  • 点击模板行创建新条目、输入内容后,未取消选中该行就直接触发删除
    在空白行创建新条目
  • 删除后控件无新增模板行
    无新增模板行
  • 若删除前先点击其他行完成编辑,删除对应条目后会正常显示新的模板行,操作无异常
    新增模板行正常显示

咨询问题

如何避免上述DataGrid新增模板行被永久删除的问题?解决方案需符合MVVM规范。可接受的方案分为两类:

  • 禁止用户在完成新行编辑前删除该行
  • 通过任意方式让新增模板行重新显示(该方案为优先选项)

经测试,删除前直接切换SelectedItem到其他项的方式无法解决该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:16:02