我正在使用 MVVM 模式在 WPF 中工作,并且通常情况看起来运行良好,因为我的大脑围绕着 WPF 和 MVVM 的细微差别。但是,我目前被困在一个特定的问题上。我的实际应用程序相当复杂,所以为了简化,让我们看一下 Josh Smith关于该模式的近乎定义的文章,并在其中使用该应用程序。
考虑图 2,并假设用户在名字和姓氏字段中输入了一些内容。然后,用户通过单击不同的客户选项卡或可能在同一应用程序中完全不同的视图模型,完全离开工作区(视图模型)。在这种情况下,我希望应用程序询问“嘿,你想保存你的更改吗?是/否/取消”并做出适当的回应。这带来了……挑战。
因为我希望用户能够“取消”第一次通过建议需要 PreviewLostKeyboardFocus (因为我可以设置 Handled=true 并取消焦点转移)。但是,一些用户操作(例如单击不同工作区的选项卡)不会转移键盘焦点。LostFocus 在这方面更好地覆盖了我,但这只是在焦点已经失去之后(当然我可以将其切换回来?)并且确定事件是否来自视图本身存在问题(即,我们要离开整个视图)或者它只是从某个包含的对象中冒出来的。
所有这一切的大图 - 这似乎是视图的一个问题,但这意味着在视图中编写代码而不是魔术视图模型。这让我觉得我没有正确看待这个。
所以我希望我错过了一些重要的概念性的 a-ha,这将使这一切变得清晰。帮助?