如何从ViewModel调用NavigationService

时间:2015-01-24 19:48:47

标签: c# wpf mvvm

这比听起来更复杂。我正在实施 MVVM模式,其中指出ViewModel 无法引用它View。话虽如此,我实施了Page导航功能,以便在NavigationService代码中使用View来完成视图更改(让我们这样做)按下"下一步"按钮)。

在程序中的某个时刻,我们需要使用语音命令而不是按钮(使用语音识别)来更改Page,并且该逻辑在ViewModel中处理(其中没有&#39} ; t引用NavigationService)。

因此,如果不在View内保留对ViewModel的引用,如何使用NavigationService更改页面?

2 个答案:

答案 0 :(得分:0)

您可以使用类似事件聚合器之类的内容在视图模型中发布“请求下一页”消息。然后,您的视图将订阅该消息并使用NavigationService更改页面来处理它。如果您使用的是MVVM框架,那么它们中的大多数都提供了一种发布/订阅开箱即用消息的方法。

答案 1 :(得分:0)

在包含视图模型的Core(nonUI)项目中。创建INavigationService界面:

public interface INavigation
{
     void Navigate(IViewModel viewmodel);
     void GoBack();
}

然后在您的UI项目中,提供该接口的实现。您可以了解如何将该实现提供给视图模型。

在简单的表单中,您需要执行以下操作:

public class MyViewModel
{
     public MyViewModel(INavigationService navigationService)
     {
          _navigationService = navigationService;
     }
}

当应用启动时,为视图模型提供实现。此时,您的所有导航都可以存在于视图模型中。如果需要从视图导航,请在视图模型上执行命令并使其导航。

看看MvvmLight是如何做到的: INavigationServiceNavigationService