【问题标题】:Navigation in WP 8.1 with MVVM Light使用 MVVM Light 在 WP 8.1 中导航
【发布时间】:2015-09-18 10:01:04
【问题描述】:

我可以导航到 DetailPage.xaml 以显示更多信息,但我无法将对象传递给 DetailVieModel,并且当我按下返回时应用程序关闭。

这是我的代码:

在 ViewModelLocator 中

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

        var navigationService = this.CreateNavigationService();
        SimpleIoc.Default.Register<INavigationService>(() => navigationService);

        SimpleIoc.Default.Register<MainViewModel>();
        SimpleIoc.Default.Register<DataService>();
        SimpleIoc.Default.Register<DetailViewModel>(true);
    }

导航,我目前只有一个,这似乎可行,因为我可以导航到 DetailPage.xaml。

 private INavigationService CreateNavigationService()
    {
        var navigationService = new NavigationService();
        navigationService.Configure("DetailPage", typeof(DetailPage));

        return navigationService;
    }

这就是我在 MainViewModel 中所做的:

 public RelayCommand ShowDetailPage
    {
        get
        {
            return new RelayCommand(() =>
            {
                _INavigationService.NavigateTo("DetailPage");
            });
        }
    }

这是我要传递给 DetailViewModel 的对象

 private Info _SelectedObject;
    public Info SelectedObject
    {
        get
        {
            return _SelectedObject;
        }
        set
        {
            _SelectedObject = value;
            if (value != null)
            {
                Messenger.Default.Send<Info>(value);
                _SelectedObject = null;
            }
            RaisePropertyChanged("SelectedObject");
        }
    }

这是我在 MainPage.xaml 上触发命令的操作

 <ListView Grid.Row="1"
                              ItemsSource="{Binding ObjectsList}">
                        <i:Interaction.Behaviors>
                            <core:EventTriggerBehavior EventName="Tapped">
                                <core:InvokeCommandAction Command="{Binding ShowDetailPage}" 
                                                          CommandParameter="{Binding SelectedObject}" />
                            </core:EventTriggerBehavior>
                        </i:Interaction.Behaviors>

最后在 DetailViewModel 上,我用 Messenger.Register 询问 SelectedObject...

 Messenger.Default.Register<Info>(this, (selectedinfo) =>
        {
            _SelectedInfo = selectedinfo;
        });

【问题讨论】:

    标签: c# windows-phone-8.1 mvvm-light navigationservice


    【解决方案1】:

    传递你可以使用的对象:

    _navigationService.NavigateTo("DetailPage", _SelectedInfo);
    

    要处理返回导航,只需在 RootFrame_FirstNavigated 事件处理程序中添加以下内容。

    #if WINDOWS_PHONE_APP
                Windows.Phone.UI.Input.HardwareButtons.BackPressed += (s, args) =>
                {
                    if (!rootFrame.CanGoBack)
                    {
                        return;
                    }
    
                    // Allow back navigation using Back button
                    args.Handled = true;
                    rootFrame.GoBack();
                };     
    #endif
    

    【讨论】:

    • 你如何在另一个页面中检索传递的参数?
    • 啊,我忘了注册我的 DetailViewModel... 现在一切正常,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多