0

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

主视图模型

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

编辑 好的,我想通了。当 NavigateTo 运行时,它仍然没有拆分查询字符串,这就是它为零的原因。

我也想做

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

            }



        }

什么也没有用,因为我想这也太早了。我真的很想在构造函数时把它拉出来,有没有办法做到这一点?

4

1 回答 1

1

我知道这不是您正在寻找的 100% 的解决方案,但您是对的……您需要等到视图加载完毕才能访问 ViewModel 中的 QueryString 参数!

为此,挂钩Loaded视图的事件并将其传递给Command视图模型上的 a!

如果在我的 github 上创建了一个演示来帮助您入门:https ://github.com/Depechie/NavigationParams

于 2014-02-16T13:25:02.633 回答