WPF数据网格在添加新项目后进入编辑

本文关键字:编辑 新项目 添加 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:09:39

我有一个WPF DataGrid,有一个列,它被绑定到我的ViewModel中的ObservableCollection。用户单击一个按钮,将新项目添加到列表中。项被添加到ObservableCollection中,新项按预期显示在DataGrid中。

每次用户添加新项目时,我都想将新单元格置于编辑模式,以便用户可以编辑项目的名称。不知道如何使用MVVM模式做到这一点

WPF数据网格在添加新项目后进入编辑

不幸的是,在MVVM模式中没有简单的方法来做到这一点,因为DataGridCell上不存在必要的属性,DataGrid中的编辑模式只能通过调用方法来实现。

最小化解决方案的方法是实现一个接口,以便您的View中的代码针对接口工作,而不是直接与ViewModel交互,至少允许某种程度的解耦。在ViewDataContextChanged处理程序期间为接口附加事件处理程序。

理想情况下,你的接口应该引发一个事件,然后你在视图代码后面处理它,一旦你集中了你的特定单元格,就在DataGrid上调用BeginEdit()。聚焦特定的单元格,开始编辑,然后聚焦现在创建的子编辑元素控件(即TextBox)。

例如

:

private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    IRaiseStartCellEditEvent context = DataContext as IRaiseStartCellEditEvent;
    if (context != null)
    {
        context.StartCellEdit += (o, args) =>
        {
            //Get the cell from first row
            var cell = DataGrid.GetCell(0, 2);
            //Focus on the cell for editing
            cell.Focus();
            //Start editing the cell
            DataGrid.BeginEdit();
            //Get the editing textbox
            var tbEditor = Extensions.GetVisualChild<TextBox>(cell);
            //Force the keyboard focus
            if (tbEditor != null)
            {
                Keyboard.Focus(tbEditor);
                tbEditor.SelectAll();
            }
        };
    }
}