MVVM基金会:如何从ViewModel关闭应用程序窗口
-
05-10-2019 - |
题
我在用 MVVM基金会 但是我认为它非常直接,并不是真正的框架。我的设置如下:
startViewModel-具有返回relayCommand/icommand的exitCommand
public ICommand ExitCommand { get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); } } public RelayCommand _exitCommand;
startview(用户控制)有一个按钮,可以绑定到exitCommand
<Button Content="Exit" Command="{Binding ExitCommand}" />
解决方案
首先,在MVVM上尽可能多地阅读,例如 WPF应用程序带有模型视图 - 视图模型设计模式 在MSDN上。一旦您了解了推动它的基本原则,答案似乎更合理。
基本上,您想保持视图(UI)和ViewModel(本质上是抽象的UI,也是抽象模型)层 分离 并脱钩。显示消息框或关闭窗口应视为UI特定的细节,因此在视图中或在消息框的情况下实现,通常可以通过“服务”获得。
关于ViewModel,这是使用 控制反转 (IOC)。以上面的消息框示例为例。它没有显示消息框本身,而是对具有显示方法的iMessageBoxService进行依赖,而viewModel调用了 - 委派责任。这可以通过利用进一步 依赖注射 (di)容器。
用于关闭视图窗口的另一种方法可能是让ViewModel公开一个事件,例如requestClose(如MSDN文章中),该视图所订阅的事件。然后,当ViewModel希望关闭相应的视图 /窗口时,将提高事件;它假设其他事情正在倾听,并且会承担责任并实际上做到这一点。
其他提示
您可以在StartViewModel中实现CloseEvent。在您的StartView中,您必须注册此CloseEvent。当您从VM中提出CloseEvent时,您的视图认识到它必须关闭您的应用程序/窗口。
不隶属于 StackOverflow