DataGrid无法在查看卸载时提交编辑

时间:2015-01-07 18:41:45

标签: wpf datagrid .net-4.5

我的主视图模型封装了一组工作空间视图模型,其中只有一个通过主视图模型上的CurrentWorkspace属性在任何给定时间公开。用户可以通过一系列单选按钮在工作区之间切换,这样当单击单选按钮时,CurrentWorkspace的值将替换为新的工作区视图模型。

每个工作区都有一个相应的视图(datatemplate),以便在切换工作空间时,旧视图卸载并加载新视图以与CurrentWorkspace属性的值保持一致。现在,每个视图都有一个数据网格,当用户可以选择单击强制视图卸载的单选按钮时,该数据网格仍然可以处于编辑模式,该视图卸载会拆除其可视树,包括数据网格。问题是,当发生这种情况时,最后一个挂起的行编辑没有提交给底层视图模型。

我试图通过尝试处理DataGrid LostFocus,LostKeyboardFocus,Unload事件以及UnloadingRow事件来解决这种情况,但它们似乎都没有提供问题的处理。似乎一旦触发了视图卸载,这些事件要么不会激活,要么发起太晚,以至于我无法调用提交。

我很感激任何帮助或指向我应该解决此问题的方法。

1 个答案:

答案 0 :(得分:0)

上面提到的问题仅在用户点击RadioButton触发视图卸载时才会被观察到。但是,主视图中还有其他按钮也会触发工作区卸载(例如“退出”按钮),但令人惊讶的是这些按钮不会产生相同的错误。

仔细观察我发现,单选按钮设计的属性为Focusable = False。撤消它可以解决我的问题,并且数据网格现在可以在视图卸载时正确地进行编辑。如上所述,DataGrid / DataGridRow LostFocus事件未按预期触发,现在我相信我找到了原因。

所以我猜DataGrid / DataGridRow依赖于他们的LostFocus事件来触发提交,并且重要的是不要以任何方式抑制此事件。我仍然希望,如果wpf控件有一个“卸载”事件作为后退选项来处理由我的案例中的设计决策所产生的问题。