c# – 添加新项目后立即添加新行

我有这样的数据网格:

<DataGrid
    ItemsSource="{Binding Things}" 
    AutoGenerateColumns="False">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Whatever" Binding="{Binding Blah}" />
    </DataGrid.Columns>     
</DataGrid>

事物和事情看起来像这样:

public ObservableCollection<Thing> Things { get; set; }

.

public class Thing
{
    public string Blah { get; set; }

    public Thing() { }
}

数据网格的默认行为是从底部的新空行开始.当我开始编辑该行的任何属性时,会创建一个新的Thing并将其添加到Things集合中.但是,在完成编辑之前不会显示新的空白行(即按Enter按钮或选择新的行/列).有没有办法(最好不违反MVVM)在我开始编辑后立即制作这个新的空白行?

这是出发点:

这是在双击空白行并编辑后:

完成编辑后,会出现一个新的空白行:

但这是我想要的(编辑时新的空白行):

最佳答案 要获得所需的行为,您需要将事件连接到datagrid的PreparingCellForEdit,每当单元进入编辑模式时都会触发该事件.

从此事件中,您可以检查下一行是否存在(当前单元格索引1),如果不存在,则继续并在该点创建它.

我相信一旦你开始编辑单元格,这将创建所需的效果,即添加新行.

例如,PreparingCellForEdit事件处理程序,每当最后一行开始编辑事件时,这将添加一个新项(并产生一个新行).

DataGrid dataGrid = sender as DataGrid;

if (dataGrid == null)
{
    return; 
}

int currentRow = e.Row.GetIndex();

if (dataGrid.Items.Count - 1 <= currentRow)
{
    Things.Add(new Thing());
}

由于您要绑定到集合,因此您必须向集合中添加新项目,而不是直接向数据网格添加新项目.由于您正在使用ObservableCollection,因此它应自动更新以反映新行.

但是,这会导致您在集合中总是有额外的东西,这可能是您不想要的.

点赞