我有另一个视图设置,并准备好等待它的视图模型。我的 RelayCommand 到达我的“当前”视图模型。从我当前的视图模型中显示新视图的最佳方式是什么?
我一直在阅读,看来我需要使用 Messenger 将消息从我的视图模型发送到??? 与我希望显示的视图相关联的新视图模型?但是我将如何显示视图?
还有一种方法可以支持从视图模型中关闭视图吗?我想知道 mvvm-light 是否会给表格带来任何额外的东西 - 即.. 触发器强制视图模型关闭视图?
我有另一个视图设置,并准备好等待它的视图模型。我的 RelayCommand 到达我的“当前”视图模型。从我当前的视图模型中显示新视图的最佳方式是什么?
我一直在阅读,看来我需要使用 Messenger 将消息从我的视图模型发送到??? 与我希望显示的视图相关联的新视图模型?但是我将如何显示视图?
还有一种方法可以支持从视图模型中关闭视图吗?我想知道 mvvm-light 是否会给表格带来任何额外的东西 - 即.. 触发器强制视图模型关闭视图?
在 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
(或直接与页面本身相关联)。
希望这可以帮助 :)