2

我正在使用MVVM Foundation,但我认为它非常简单,并不是真正特定于框架的。我的设置如下:

  • 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}" />  
    
4

2 回答 2

3

首先,尽可能多地阅读 MVVM,例如MSDN 上的具有模型-视图-视图模型设计模式的 WPF 应用程序。一旦您了解了驱动它的基本原理,答案似乎会更合理。

基本上,您希望将 View (UI) 和 ViewModel(本质上是抽象 UI,但也是抽象模型)层分开和解耦。显示消息框或关闭窗口应被视为 UI 特定细节,因此在视图中实现,或者在消息框的情况下,更普遍地通过“服务”提供。

对于 ViewModel,这是使用控制反转(IoC) 实现的。以上面的消息框为例。它不是显示消息框本身,而是依赖于具有 Show 方法的 IMessageBoxService 并且 ViewModel 调用它来代替 - 委派责任。这可以通过利用依赖注入(DI) 容器来进一步实现。

用于关闭 View 窗口的另一种方法可能是让 ViewModel 公开 View 订阅的事件,例如 RequestClose(如 MSDN 文章中所述)。然后 ViewModel 会在它想要关闭相应的视图/窗口时引发事件;它假设有其他东西在听,并且会承担责任并实际去做。

于 2010-09-25T13:10:00.850 回答
1

您可以在 StartViewModel 中实现 CloseEvent。在您的 StartView 中,您必须注册此 CloseEvent。然后,当您从 VM 引发 closeevent 时,您的视图会认识到它必须关闭您的应用程序/窗口。

于 2010-09-25T12:54:46.717 回答