【发布时间】:2015-09-14 10:41:05
【问题描述】:
我正在尝试在 wiew 模型之外的 Windows 8.1 通用应用程序中调用 NavigateTo。我已经试过了:
var dispatcher = Window.Current.Dispatcher;
await dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
async () => await NavigateToRegistrationPage()
);
结果抛出异常
对象引用未设置为对象实例。
我还尝试使用 Messenger 通过 Messenger 消息调用导航表单 ViewModel:
Messenger.Default.Send<MessengerEvents.NavigateToRegistrationPage>(
new MessengerEvents.NavigateToRegistrationPage()
);
Public LoginViewModel //...
MessengerInstance.Register<MessengerEvents.NavigateToRegistrationPage>(
this,
(message) => GoToRegistrationPage()
);
也不行。
调用目标抛出错误
我不能直接在视图模型中调用导航(检查时没有直接从视图模型调用的信使完美工作)因为导航是为了响应服务器消息而执行的。
private void GoToRegistrationPage()
{
NavigationService.NavigateTo(ResourceService.CHOOSE_REGISTRATION_PAGE);
}
【问题讨论】:
-
根据您使用 MVVM-Light 的方式,应该有一个 IOC 容器,您可以从中请求导航服务的当前实例。并使用它来执行与视图模型内部相同的实际导航
-
ServiceLocator.Current.GetInstance<INavigationService>();最有可能是代码 -
@Depechie 当我尝试这个时,我检查了我是否得到了对象,但“currentPageKey”为空”我在 CreateNavigationService navigationService.Configure(ResourceService.CHOOSE_LOGIN_PAGE, typeof(LoginPage)) 中有这个页面;仍然没有想法如何解决它 instance.currentPageKey 抛出 System.NullReferenceException 类型的异常
-
嗯,看了这条评论有点不清楚发生了什么
标签: c# mvvm navigation mvvm-light win-universal-app