WPF数据网格在添加新项目后进入编辑
本文关键字:编辑 新项目 添加 数据 数据网 网格 WPF | 更新日期: 2023-09-27 18:09:39
我有一个WPF DataGrid,有一个列,它被绑定到我的ViewModel中的ObservableCollection。用户单击一个按钮,将新项目添加到列表中。项被添加到ObservableCollection中,新项按预期显示在DataGrid中。
每次用户添加新项目时,我都想将新单元格置于编辑模式,以便用户可以编辑项目的名称。不知道如何使用MVVM模式做到这一点
不幸的是,在MVVM
模式中没有简单的方法来做到这一点,因为DataGridCell
上不存在必要的属性,DataGrid
中的编辑模式只能通过调用方法来实现。
最小化解决方案的方法是实现一个接口,以便您的View
中的代码针对接口工作,而不是直接与ViewModel
交互,至少允许某种程度的解耦。在View
的DataContextChanged
处理程序期间为接口附加事件处理程序。
理想情况下,你的接口应该引发一个事件,然后你在视图代码后面处理它,一旦你集中了你的特定单元格,就在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();
}
};
}
}