显示当前视图模型中的另一个视图并关闭视图模型中的视图?

问题描述 投票:1回答:1

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

我一直在阅读,看来我需要使用Messenger才能从我的视图模型向???发送消息。与要显示的视图关联的新视图模型?但是如何显示视图?

还有一种方法可以支持从视图模型关闭视图?我想知道mvvm-light是否给表带来了额外的东西-即..触发以迫使viewmodel关闭视图?

mvvm viewmodel mvvm-light relaycommand
1个回答
3
投票

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

在ViewModel中:

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

在您的视图后面的代码中:

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

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

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

希望这会有所帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.