0

我需要防止 ViewModel 关闭并防止模型编辑被取消。我尝试在 ViewModel 中覆盖 OnClosing,但该事件来得太晚了。它是在取消模型编辑之后出现的。(对我来说似乎是奇怪的事件顺序。)

我发现了一个旧的问题和答案,说要使用 OnViewModelCanceling,但是该方法在当前版本中不作为可覆盖的方法存在。

我找到了 OnViewModelEvent,但别名,它不会被我的 ViewModel 上的任何事件调用。

那么,在 ViewModel 上覆盖 Cancel 并返回 false 是正确的解决方案,还是必须在 ViewModel 上注册 Canceling 事件?

我尝试过使用 Cancel 的覆盖,这样做适用于简单的 ViewModel。但是,如果当前 ViewModel 具有 ViewModel 的嵌套控件,并且它们也从 Cancel 返回 false,则外部 ViewModel 甚至不会在 Cancel 处出现裂缝。(这是有道理的。)我的问题是,有时我确实想尊重 Cancel 并且外部 ViewModel 知道这一点,但嵌套的 ViewModel 不知道。我知道我可以通过多种方式解决这个问题,但我想知道在我解决这个新问题之前是否有更好的方法来防止取消模型的编辑。

这可能违反每个问题一个问题的规则,但它是极其密切相关的。我还需要知道如何允许 ViewModel 关闭,但不要对其模型执行 EndEdit(或 CancelEdit)。

使用 Catel 3.9 的 WPF 应用程序

4

1 回答 1

0

您可以覆盖 Save() 并返回 false。防止用户控件不关闭将很难实现,因为最终用户很难理解。

确保在返回 false 之前不要调用 base,因为 base.Save() 和 base.Cancel() 将启动模型编辑。

于 2014-04-22T20:39:28.517 回答