单元格在wpf数据网格中失去焦点后仍保持编辑模式

本文关键字:模式 编辑 焦点 失去 wpf 数据 数据网 网格 单元格 | 更新日期: 2023-09-27 18:01:14

我有一个DataGrid,其中有两列,即NameGroup

我已经使用了EnterKeyTravarsal类,所以我可以使用Enter作为TAB

此外,基于某些条件,我使用InputBindings将新行添加到ViewModel中的DataGrid中。

但是,当添加新行时,我可以看到在添加新行之前聚焦的最后一个单元格仍处于编辑模式。

这是我创建的一个示例项目,用来清楚地解释我的问题。

单元格在wpf数据网格中失去焦点后仍保持编辑模式

更新您的类EnterKeyTraversal

static void ue_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    var ue = e.OriginalSource as FrameworkElement;
    DataGrid dg = FindVisualParent<DataGrid>(ue) as DataGrid;
    DataGridCell cell = FindVisualParent<DataGridCell>(ue);
    if (e.Key == Key.Enter)
    {
        //e.Handled = true;
        if (dg != null)
        {
            dg.CommitEdit();
        }
        if (cell != null)
        {
            cell.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
        }
        else
        {
            ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
        }
        if (dg != null)
        {
            dg.BeginEdit();
        }
    }
}

我没有时间下载您的所有代码,但我会尽力提供帮助。

我记得我也遇到过类似的问题,我用任一

this.grid.CommitEdit();

this.grid.CommitEdit(DataGridEditingUnit.Row, true);

在您的情况下,您可能需要使用"DataGridEditingUnit.Cell">

我在插入新行之前调用了这些方法,但我记得我在让它们工作时遇到了很多问题,最终没有正确理解它们(尽管它们工作得很好(,对不起:S

编辑:公共DataGrid 代码

public DataGrid MyGrid
{
  get 
  {
    return this.grid;
  }
}