Windows phone 8 未设置查询字符串-Cimbalino Windows Phone

Windows phone 8 未设置查询字符串-Cimbalino Windows Phone,windows-phone-8,query-string,cimbalino,Windows Phone 8,Query String,Cimbalino,我正在使用导航,但从未为我设置查询参数 主视图模型 private readonly INavigationService navigationService = null; public MainViewModel(INavigationService navigationService) { this.navigationService = navigationService; NavigateToPg2Cmd = new RelayCo

我正在使用导航,但从未为我设置查询参数

主视图模型

   private readonly INavigationService navigationService = null;
    public MainViewModel(INavigationService navigationService)
    {
        this.navigationService = navigationService;
        NavigateToPg2Cmd = new RelayCommand(() => NaviagateToPg2());
        NavigateToPg2WithParmsCmd = new RelayCommand(() => NaviagateToPg2WithParms()); 
    }

    private void NaviagateToPg2WithParms()
    {

        navigationService.NavigateTo(new Uri("/Views/SecondPg.xaml?parameter=1&parm2=2", UriKind.Relative));
    }
当我查看NavigationService时,查询参数字典总是0

 static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        if (ViewModelBase.IsInDesignModeStatic)
        {
        }
        else
        {

        }

        SimpleIoc.Default.Register<INavigationService, NavigationService>();

        SimpleIoc.Default.Register<MainViewModel>();
        SimpleIoc.Default.Register<SecondVM>();
    }

什么也不起作用,因为我想也太早了。不过,我真的很想在构建时将其拔出,有什么方法可以做到这一点吗?

我知道这不是您要寻找的100%解决方案,但您是真的。。。在访问ViewModel中的QueryString参数之前,需要等待视图加载完毕

要执行此操作,请钩住视图的
Loaded
事件,并将其传递给viewmodel上的
命令


如果在我的github上创建了一个演示,让您开始:

不确定这段代码会出现什么问题。。。也许可以先尝试一个工作演示,看看你是否可以将其应用于你的应用程序?这里有一个完整的例子:谢谢,这帮助我解决了这个问题,但不确定解决方案是什么。问题是,我猜在触发NavigateTo之后,查询字符串不会立即被拆分,因此我总是看到零。另一个问题是,我试图访问第二页构造函数中的查询字符串,这似乎也很早就得到了它。酷,这可能是我必须要做的。我想我可以设置一个私有属性,然后在构造函数的下一行中使用该属性(或者在ViewLoaded中执行所有操作)
   private readonly INavigationService navigationService = null;
        public SecondVM(INavigationService navigationService)
        {
            this.navigationService = navigationService;


            if (IsInDesignMode)
            {
                Message = "Design Mode";
            }
            else
            {
                if (navigationService.QueryString.ContainsKey("paramter"))
                {
                     Message = navigationService.QueryString["parameter"];
                }

            }



        }