C# DATAGRID在空白行获得焦点时添加新项 < P> >我希望我的 用 CuuleAdAdvase=“true”来更新新的 ITEMVM < /> >当空白行获得聚焦默认行为的整数时,在首次编辑空白行时创建新的 ITEMVM < /代码>。或者换句话说,我想将默认的DataGrid工作流程从: 用户输入空行 用户按F2键 新的ItemVM被实例化 到不需要显式地编辑空白行的自定义工作流: 用户输入空行 新的ItemVM被实例化

C# DATAGRID在空白行获得焦点时添加新项 < P> >我希望我的 用 CuuleAdAdvase=“true”来更新新的 ITEMVM < /> >当空白行获得聚焦默认行为的整数时,在首次编辑空白行时创建新的 ITEMVM < /代码>。或者换句话说,我想将默认的DataGrid工作流程从: 用户输入空行 用户按F2键 新的ItemVM被实例化 到不需要显式地编辑空白行的自定义工作流: 用户输入空行 新的ItemVM被实例化,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,将新的ItemVM添加到绑定的ItemsSource时并不重要DataGrid类使用私有方法实例化底层数据对象 如果获得占位符的行容器引用,则可以处理其GotFocus事件,并使用反射调用AddNewItem()方法: private void DataGrid_Loaded(object sender, RoutedEventArgs e) { DataGridRow newItemPlaceholderRow = (DataGridRow)dg.ItemContainerGenera

将新的
ItemVM
添加到绑定的
ItemsSource

时并不重要
DataGrid
类使用私有方法实例化底层数据对象

如果获得占位符的行容器引用,则可以处理其
GotFocus
事件,并使用反射调用
AddNewItem()
方法:

private void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
    DataGridRow newItemPlaceholderRow = (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(CollectionView.NewItemPlaceholder);
    if (newItemPlaceholderRow != null)
        newItemPlaceholderRow.GotFocus += (ss, ee) =>
        {
            typeof(DataGrid).GetMethod("AddNewItem",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
                .Invoke(dg, null);
        };
}

请注意,
AddNewItem()
未记录,在未来的版本中可能会被修改或删除,但是如果您真的想修改内置控件的属性,另一个选项可能是创建您自己的自定义属性。

您是否正在处理
DataGrid
加载的
事件?在加载之前没有容器。我的错误是,将加载的处理程序添加到了错误的DataGrid(针对该问题,测试项目中有多个DataGrid)。