我在用 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时,您的视图认识到它必须关闭您的应用程序/窗口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top