我有一个tabControl.在其中一个tabitem我有一个usercontrol,它包含一个具有CanUserAddRows ="True"的数据网格.用户可以在列中键入数据并按下输入创建的新行(我假设datagrid执行此CanzserAddRows ="True").问题是当我输入数据并更改标签时,我得到此异常"在'Addnew'开始的交易期间不允许使用"WPF datagrid'newitemplaceholderposition'"
有什么建议可以避免吗?
我试图将dg.CommitEdit()放在usercontrol.unloaded()上.我没有得到例外,但我没有得到新的行.
小智 3
我遇到了同样的问题...这里有一些片段描述了我如何解决它。请注意,就我而言,我想拒绝更改以避免错误。如果您想提交更改,这可能会引导您走向正确的方向。
1a) 使用数据网格上的 InitializingNewItem 事件来捕获添加行。
private void mydatagrid_InitializingNewItem(object sender, InitializingNewItemEventArgs e)
{
_viewmodel.NewRowDefaults((DataRowView)e.NewItem);
}
Run Code Online (Sandbox Code Playgroud)
1b) 在本例中,我在视图模型中调用一个方法来填充行默认值并保存对该行的引用。
private DataRowView _drvAddingRow { get; set; }
public void NewRowDefaults(DataRowView drv)
{
_drvAddingRow = drv;
...
}
Run Code Online (Sandbox Code Playgroud)
2) 然后,当您需要拒绝更改时(在通知属性更改或无论您的情况是什么之前),请在捕获的数据行视图上使用 CancelEdit 方法。
_drvAddingRow.CancelEdit();
Run Code Online (Sandbox Code Playgroud)