0

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

ナビゲーションは、現時点では 1 つしかありません。これは、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 で SelectedObject に Messenger.Register... を要求します。

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

1 に答える 1

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
于 2015-09-18T17:32:39.883 に答える