所以使用MVVM,专家如何处理这种情况?
我有一个带有打开/保存菜单项的窗口,它们都使用标准的WPF命令。 Window有一个包含命令对象的底层ViewModel。这些命令对象是实现ICommand
internface的简单类的实例;例如OpenCommand
和SaveCommand
。每个的Execute方法分别调用VM的Open()
和Save()
函数。你知道的所有标准MVVM东西!
现在的问题是:当用户点击“打开”菜单项时,他可能已经对当前文档进行了更改,因此我希望在调用Save()
之前检查并调用Open()
函数。究竟谁负责这样做以及如何做?
OpenCommand.Execute()
内执行此操作,并在那里调用SaveCommand.Execute()
。VM.Save()
内调用OpenCommand.Execute()
函数。从原子的角度来看,Open()函数实际上应该只打开一个文档而不进行其他验证/检查。但是,同样的逻辑也适用于OpenCommand。那我该把这个功能放在哪里呢?
答案 0 :(得分:0)
我认为,在这种情况下,最好对命令进行抽象,因此我建议第三段:
我也可以在我的VM的
Save()
功能中调用Open()
。
Open()
函数实际上应该只打开一个文档而不进行其他验证/检查。
我同意,但是,例如,在打开门之前,首先要确保它已关闭。会成为一个单独的功能吗?我认为这将更容易,更正确:
private void Open()
{
if (IsSomeChanges == true)
{
Save();
}
...
}
Command
是一个pattern
,允许您以最小的依赖性和不同的控件调用方法View
。例如,如果您必须在View一侧调用Command,例如在附加行为中,则需要使用SomeCommand.Execute()
。但是在ViewModel
里面你可以直接调用这些方法。