Query String Not Getting Set - Cimbalino Windows Phone

93 views Asked by At

I am using Cimbalino navigation but the query param never gets set for me.

Main View Model

   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));
    }

When I look into NavigationService the Query Param dictionary is always 0.

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

        if (ViewModelBase.IsInDesignModeStatic)
        {
        }
        else
        {

        }

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

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

Edit Ok, I figured it out. When NavigateTo runs it still has not split the query string out yet so that's why it is zero.

I was also trying to do

   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"];
                }

            }



        }

what did not work either as I guess it was too early as well. I really would like to pull it out at constructor time though, is there a way to do this?

1

There are 1 answers

2
Depechie On

I know it's not 100% the solution you are looking for, but you are true... You'll need to wait until the view is loaded before accessing the QueryString params in the ViewModel!

To do this, hook into the Loaded event of the view and pass it to a Command on the viewmodel!

If created a demo of this on my github to get you started: https://github.com/Depechie/NavigationParams