我正在使用MVVM Foundation,但我认为它很直接,而且不是特定于框架。我的设置如下:
StartViewModel - 有一个ExitCommand,返回一个RelayCommand / ICommand
public ICommand ExitCommand {
get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
}
public RelayCommand _exitCommand;
StartView(用户控件)有一个绑定到ExitCommand
的按钮<Button Content="Exit" Command="{Binding ExitCommand}" />
答案 0 :(得分:3)
首先,尽可能多地阅读MVVM,例如MSDN上的WPF Apps With The Model-View-ViewModel Design Pattern。一旦你理解了推动它的基本原则,答案就会更合理。
基本上你想保持你的View(UI)和ViewModel(基本上是抽象的UI,还有抽象模型)层separate并解耦。显示消息框或关闭窗口应视为UI特定细节,因此在视图中实现,或者在消息框中实现,通常通过“服务”提供。
对于ViewModel,这是使用Inversion of Control(IoC)实现的。以上面的消息框为例。它不是显示消息框本身,而是依赖于具有Show方法的IMessageBoxService,而ViewModel则调用它 - 委派责任。这可以通过利用Dependency Injection(DI)容器来进一步发展。
用于关闭View窗口的另一种方法可能是ViewModel公开一个事件,例如View订阅的RequestClose(如MSDN文章中所述)。然后ViewModel会在想要关闭相应的View /窗口时引发事件;它假定其他人正在倾听并承担责任并实际执行。
答案 1 :(得分:1)
您可以在StartViewModel中实现CloseEvent。在您的StartView中,您必须注册此CloseEvent。当您从虚拟机提升关闭事件时,您的视图会识别出它必须关闭您的应用程序/窗口。