在WPF DataGrid中,当右键单击DataGrid行外部时,如何强制该行失去焦点(从而提交)

在WPF DataGrid中,当右键单击DataGrid行外部时,如何强制该行失去焦点(从而提交),wpf,wpfdatagrid,Wpf,Wpfdatagrid,我有一个带有可编辑单元格的数据网格。当行失去焦点时,将触发属性更改事件,我通过将更改提交到实体对象并最终提交到数据库来处理该事件。 用户可以在datagrid外部单击鼠标右键,然后从上下文菜单中选择。一些上下文菜单项依赖于datagrid中的数据(确切地说,它们依赖于提交的数据)。 但是,问题在于,在DataGrid外部单击鼠标右键并不会从DataGrid中移除焦点。这意味着不会提交对当前行的更改。这意味着用户会感到惊讶,因为菜单项命令处理的数据与屏幕上显示的数据不同。 我意识到这就是DataG

我有一个带有可编辑单元格的数据网格。当行失去焦点时,将触发属性更改事件,我通过将更改提交到实体对象并最终提交到数据库来处理该事件。 用户可以在datagrid外部单击鼠标右键,然后从上下文菜单中选择。一些上下文菜单项依赖于datagrid中的数据(确切地说,它们依赖于提交的数据)。 但是,问题在于,在DataGrid外部单击鼠标右键并不会从DataGrid中移除焦点。这意味着不会提交对当前行的更改。这意味着用户会感到惊讶,因为菜单项命令处理的数据与屏幕上显示的数据不同。 我意识到这就是DataGrid的工作方式。然而,我也意识到用户永远无法理解这一点

那么我该如何解决这个问题呢?右键单击时可以强制失去焦点吗?或者DataGrid上是否有我可以使用的特殊属性


(我发现这一点:它使DataGrid在每个单元格而不是每行的基础上提交,但这并不能解决我的问题,因为用户仍然可能丢失一些数据(尽管只有一个单元格而不是整行))

我使用了LPL的建议,并创建了一个eventhandler:

 private void ViewUserControl_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {            
            // The purpose of this is to make sure that before the context menu on the outer datagrid is run, the row in the inner datagrid is committed (otherwise we might create orders with different quantities than what the user sees on the screen)
            Keyboard.ClearFocus();
        }
这就解决了问题。

聚焦窗口是否有帮助?