这比听起来更复杂。我正在实施 MVVM模式,其中指出ViewModel
无法引用它View
。话虽如此,我实施了Page
导航功能,以便在NavigationService
代码中使用View
来完成视图更改(让我们这样做)按下"下一步"按钮)。
在程序中的某个时刻,我们需要使用语音命令而不是按钮(使用语音识别)来更改Page
,并且该逻辑在ViewModel
中处理(其中没有&#39} ; t引用NavigationService
)。
因此,如果不在View
内保留对ViewModel
的引用,如何使用NavigationService
更改页面?
答案 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是如何做到的: INavigationService, NavigationService