MVVM Foundation:如何从ViewModel关闭应用程序窗口

时间:2010-09-24 23:13:29

标签: c# mvvm mvvm-foundation

我正在使用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}" />  
    

2 个答案:

答案 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。当您从虚拟机提升关闭事件时,您的视图会识别出它必须关闭您的应用程序/窗口。