在细节部分的MasterDetail页面中,可以在一些TextBox中进行编辑。当我在主部件中选择一个新项目时,我必须检查所有输入的有效性。此外,按下硬件后退按钮。
我的问题是,当我用CanGoBack检查时,我得到的答案是真的,然后我给GoBack打电话。在调用GoBack之前,我可以让页面检查它的有效性,并在它无效时返回false。然后我不打电话给GoBack。到现在为止还挺好。不幸的是,如果TextBox仍然是最后一个输入的焦点,则LostFocus仅在GoBack之后调用,因此当我检查有效性时,来自该控件的Bindings不会写回模型,因为它在GoBack之前被检查。
是否有可能以某种方式禁止GoBack回归?
使用焦点确定控件并调用它的BindingManger更新绑定不起作用,因为焦点已经在主要部件中列表视图的新选定项目上。而且因为我使用编译绑定,我没有可以手动调用的BindingExpressions。
另一个尝试是在有效性检查之前调用Bindings.Update(),这对于编译绑定是可用的。但这种方法很愚蠢。它首先将所有值写入视图,然后返回到viewmodel。因此它会覆盖我的输入。
有人知道如何正确处理页面上的输入验证并在GoBack无效时禁止它们吗?