gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:28:57 24 4
gpt4 key购买 nike

我有一个这样的数据网格:

<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 集合中。但是,在我完成编辑之前不会显示新的空白行(即按回车按钮或选择新的行/列)。有没有一种方法(最好是不违反 MVVM 的方法)在我开始编辑后立即显示这个新的空白行?

这是起点:

Starting Point

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

Editing

当我完成编辑时,会出现一个新的空行:

New Blank Line

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

New Blank Line While Editing

最佳答案

要获得您想要的行为,您需要将一个事件连接到数据网格的 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());
}

由于您要绑定(bind)到一个集合,因此您必须向该集合添加一个新项,而不是直接向数据网格添加一个新项。由于您使用的是 ObservableCollection,它应该会自动更新以反射(reflect)新行。

但是,这会导致您的收藏中总是有一个您可能不想要的额外 Thing

关于c# - 添加新项目后立即添加新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20080280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com