【问题标题】:MVVM light Page Navigation Outside ViewModelViewModel 外的 MVVM 灯光页面导航
【发布时间】: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&lt;INavigationService&gt;(); 最有可能是代码
  • @Depechie 当我尝试这个时,我检查了我是否得到了对象,但“currentPageKey”为空”我在 CreateNavigationService navigationService.Configure(ResourceService.CHOOSE_LOGIN_PAGE, typeof(LoginPage)) 中有这个页面;仍然没有想法如何解决它 instance.currentPageKey 抛出 System.NullReferenceException 类型的异常
  • 嗯,看了这条评论有点不清楚发生了什么

标签: c# mvvm navigation mvvm-light win-universal-app


【解决方案1】:

问题解决了,我尝试从 MVVM Locator 中获取调度程序,将调度程序移动到 app.xaml.cs 并完美运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    相关资源
    最近更新 更多