4

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

那么我该如何解决呢?右键单击时可以强制失去焦点吗?或者我可以使用 DataGrid 上的一些特殊属性吗?

(我发现了这一点:WPF DataGrid CellEditEnding - DataSet Not Updating Till Row Lost Focus这使得 DataGrid 以每个单元格而不是每行为基础提交,但它不能解决我的问题,因为用户仍然可能会丢失一些数据(虽然只有一个单元格而不是一整行))

4

1 回答 1

3

我使用了 LPL 的建议,并创建了一个事件处理程序:

 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();
        }

这解决了问题。

于 2012-05-15T07:14:41.570 回答