Mvvm 显示当前Viewmodel中的另一个视图并关闭Viewmodel中的视图?

Mvvm 显示当前Viewmodel中的另一个视图并关闭Viewmodel中的视图?,mvvm,viewmodel,mvvm-light,relaycommand,Mvvm,Viewmodel,Mvvm Light,Relaycommand,我有另一个视图设置,它的viewmodel已经准备就绪,正在等待。我的RelayCommand到达我的“当前”视图模型。从当前viewmodel显示新视图的最佳方式是什么 我一直在阅读,似乎我需要使用Messenger从我的viewmodel向???与要显示的视图关联的新视图模型?但我该如何展示这一观点呢 还有一种方法支持从viewmodel关闭视图吗?我想知道mvvm灯是否带来了额外的东西-即。。强制viewmodel关闭视图的触发器?在WPF中,有两种“显示”/“关闭”视图的方法(开箱即用)

我有另一个视图设置,它的viewmodel已经准备就绪,正在等待。我的RelayCommand到达我的“当前”视图模型。从当前viewmodel显示新视图的最佳方式是什么

我一直在阅读,似乎我需要使用Messenger从我的viewmodel向???与要显示的视图关联的新视图模型?但我该如何展示这一观点呢

还有一种方法支持从viewmodel关闭视图吗?我想知道mvvm灯是否带来了额外的东西-即。。强制viewmodel关闭视图的触发器?

在WPF中,有两种“显示”/“关闭”视图的方法(开箱即用)。第一种方法很简单,通过
.Show()
.ShowDialog()
方法显示窗口或对话框,可以使用
.Close()
方法关闭它们。在这种情况下,您可以使用前面提到的MVVMLight
Messenger
类,以解耦的方式向视图发送显示/关闭消息。这里有一个“结束”的例子

在ViewModel中:

CloseTheView()
{
    Messenger.Default.Send(new CloseTheViewMessage);
}
在视图的代码隐藏中:

//Constructor
public TheView()
{
    ...
    Messenger.Default.Register<CloseTheViewMessage>( () => this.Close() );
}
//构造函数
公众视野()
{
...
Messenger.Default.Register(()=>this.Close());
}
正如您所看到的,这涉及到代码隐藏文件中的一些代码,但这没什么大不了的,因为它只是一行功能

第二种方法是使用导航框架(可用于WPF和Silverlight)。您定义了一个“Shell”,它是主
窗口
(或
UserControl
),将
框架放入其中,并使其他视图继承自
页面
,然后使用与
框架
关联的
导航服务
的实例从视图模型启动导航(或直接与页面本身关联的页面)


希望这有帮助:)

您使用的是WPF还是silverlight?它目前是WPF,但我希望silverlight具有相同的功能