mvvm-Light:从我当前的Viewmodel显示另一个View并从我的viewmodel关闭一个视图?

时间:2011-05-03 15:24:28

标签: mvvm viewmodel mvvm-light relaycommand

我有另一个视图设置并准备好并等待其viewmodel。我的RelayCommand到达我的“当前”视图模型。从我当前的视图模型中显示新视图的最佳方法是什么?

我一直在阅读,似乎我需要使用Messenger从我的viewmodel发送消息到???我的新视图模型与我希望显示的视图相关联? ...,但我怎么会显示视图??

有没有人有一个很好的例子来说明我需要做什么?

还有一种方法可以支持从视图模型中关闭视图。我想知道mvvm-light是否会给表带来额外的东西 - 例如..触发器强制viewmodel关闭视图?

任何帮助真的很感激

由于

1 个答案:

答案 0 :(得分:3)

在WPF中,您有两种方式(开箱即用)“显示”/“关闭”视图。第一种,只需通过.Show().ShowDialog()方法显示窗口或对话框,就可以使用.Close()方法关闭它们。在这种情况下,您可以使用您提到的MVVMLight Messenger类以分离的方式将show / close消息发送到视图。这是“关闭”的例子。

在ViewModel中:

CloseTheView()
{
    Messenger.Default.Send(new CloseTheViewMessage);
}

在你的观点的代码隐藏中:

//Constructor
public TheView()
{
    ...
    Messenger.Default.Register<CloseTheViewMessage>( () => this.Close() );
}

正如您所看到的,这涉及代码隐藏文件中的一些代码,但这没什么大不了的,因为它只是一行功能。

第二种方法是使用导航框架(可用于WPF和Silverlight)。您定义了一个“Shell”,它是主Window(或UserControl),您在其中放置了frame,并且您将其他视图从Page继承,然后使用与NavigationService关联的Frame实例(或直接与页面本身关联的实例)从ViewModel启动导航。

希望这会有所帮助:)