【问题标题】:MVVM Light throws (Did you forget to call > NavigationService.Configure? Parameter name: pageKey) exceptionMVVM Light 抛出(是否忘记调用 > NavigationService.Configure?参数名称:pageKey)异常
【发布时间】:2015-10-01 20:41:30
【问题描述】:

我正在使用 mvvm light 制作通用 winrt 应用程序。在 ViewModelLocator 中,我在 mvvm light 的内置 NavigationService 中注册了我的视图

SimpleIoc.Default.Register<INavigationService>(() =>
{
    var navigationService = new NavigationService();
    navigationService.Configure("PreRegisterPage", typeof(PreRegisterPage));
    return navigationService;
});

但是当我尝试使用此代码导航到该页面时,

 _navigationService.NavigateTo("PreRegisterPage");

抛出这个异常

没有这样的页面:PreRegisterPage。你忘记打电话了吗 导航服务。配置?参数名称:pageKey

我错过了什么吗?

【问题讨论】:

  • 缺少一些上下文。
  • 检查内部异常。它可能被错误地解释。
  • 内部异常为null

标签: c# mvvm windows-runtime mvvm-light win-universal-app


【解决方案1】:

PageService 对象的构造函数中,您必须使用ViewModelPage 类调用Configure 方法。如下:

Configure<MainViewModel, MainPage>();

上面显示错误信息的代码也在PageService.cs中。我认为这是一种愚蠢的做法。

【讨论】:

    【解决方案2】:

    您可能忘记在ViewModel ctor 中传递INavigationService 对象,您的ViewModel 应该如下所示:

      public class MainViewModel : ViewModelBase
    {
        private INavigationService _navigationService;
        private RelayCommand _navigateCommand;
        public RelayCommand NavigateCommand
        {
            get
            {
                return _navigateCommand
                    ?? (_navigateCommand = new RelayCommand(
                    () =>
                    {
                        _navigationService.NavigateTo("PreRegisterPage");
                    }));
            }
        }
        public MainViewModel(INavigationService navigationService)
        {
            _navigationService = navigationService;           
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多