我希望我的<DataGrid/>
和CanUserAddItems="true"
在空白行获得默认行为的关注时,将新的ItemVM
实例化,以创建新的{ {1}},当空白行第一次被编辑时。换句话说,我想将默认ItemVM
的工作流程更改为:
DataGrid
实例化无需首先明确编辑空白行的自定义工作流程:
ItemVM
实例化在什么时候将新的ItemVM
添加到绑定的ItemVM
上并不重要。
答案 0 :(得分:1)
DataGrid
类使用私有的AddNewItem方法来实例化基础数据对象。
如果获得对占位符的行容器的引用,则可以处理其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()
没有记录,可以在以后的版本中进行修改或删除,但是如果您确实想修改内置控件的行为,则另一个选择可能是创建自定义控件一个。