如何防止在Catel中关闭ViewModel(以及取消模型)

时间:2014-04-22 16:47:12

标签: catel

我需要阻止ViewModel关闭,并且还要阻止模型编辑被取消。我试图在ViewModel中覆盖OnClosing,但那个事件来得太晚了。在模型编辑被取消之后。 (对我来说,这似乎是一种奇怪的事件顺序。)

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

我找到了OnViewModelEvent,但是别名,我的ViewModel上的任何事件都没有调用它。

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

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

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

使用Catel 3.9的WPF应用程序

1 个答案:

答案 0 :(得分:0)

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

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