1

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

我一直在阅读,看来我需要使用 Messenger 将消息从我的视图模型发送到??? 与我希望显示的视图相关联的新视图模型?但是我将如何显示视图?

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

4

1 回答 1

3

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

在视图模型中:

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

在您视图的代码隐藏中:

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

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

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

希望这可以帮助 :)

于 2011-05-04T10:21:17.160 回答