2017-01-31 5 views
0

私のXamarin.Forms Prismアプリでは、ナビゲーションにMasterDetailPageを使用しています。Xamarin.Forms Prism - ナビゲーションサービスを使用して1つの詳細ページから別のページにナビゲート

私は1つの詳細ページにいますが、マスターページから選択したかのように別の詳細ページに移動したいと思います。 App.xaml.csで

初期ナビゲーション:私はMyFirstPage上のショートカットボタンをクリックすると

protected override void OnInitialized() 
{ 
    ... 
    NavigationService.NavigateAsync("MainPage/RootNavigation/MyFirstPage"); 
} 

、私はメインページ/ RootNavigation/MySecondPageに行きたいと思います。私が達成できた最も近いものは絶対的なウリを使用していたことです。

private async void OnShortcutTapped(MyModel sender) 
{ 
    ... 
    await _navigationService.NavigateAsync(new Uri("http://myapp.com/MainPage/RootNavigation/MySecondPage", UriKind.Absolute), navigationParams, null, false); 
} 

これは基本的に私が欲しいものを私に取得しますが、それはページに移動されたかのように、私はマスターを見えるようにしてMySecondPageのメニュー項目を選択した場合、このように移動した後、それは詳細ページをリフレッシュします。

このナビゲーションを維持するより良い方法はありますか?マスターページでMySecondPageが既に表示されていて、再読み込みしようとしていないことがわかっていますか?

答えて

1

ナビゲーションパターンは私にはあまり意味がありませんが、MasterDetailPageViewModelでnavigateコマンドを呼び出すことで、必要なものを実現できます。これを行うにはいくつかの方法があります。 IEventAggregatorを使用して、ナビゲートするためにMasterDetailPageViewModelにメッセージを送信するか、MasterDetailPageViewModel上に存在するDelegateCommandを呼び出すCompositeCommandを使用できます。あなたはここにCompositeCommandを使用してのサンプルを見ることができます

https://github.com/PrismLibrary/Prism-Samples-Forms/tree/master/UsingCompositeCommands

また、私はXamarin進化会見で与えたこのサンプルでメッセージを送信する方法を見ることができます:https://github.com/brianlagunas/Evolve2016SamplesAndSlides

別のオプションは、になりますあなたのMyFirstPageコードを使ってApp.Current.MainPage ViewModelからnavigateコマンドを呼び出してください。

+0

IEventAggregatorを実装して、MainPageViewModelを指定されたURI(RootNavigation/MySecondPage)にナビゲートしましたが、絶対URIと同じ最終結果を持つようです。イベントがナビゲーションを処理した後、マスターからMySecondPage項目を選択すると、MySecondPage.OnNavigatedFromとMySecondPage.OnNavigatedToが、新しいページをロードしているかのように呼び出されます。 – jkh

+0

はい、これが予想されます。 PrismもXamarinもこれらのページをキャッシュします。ここでの利点は、MasterDeatialPageを再作成していないことです。 –

+0

OK、これは実際のマスター選択を模倣するのに最も近いものですか? 2つ目の選択が無視されているかのように動作するため、OnNavigatedFrom/OnNavigatedToは実際にMaster選択を2回連続して実行するという点で異なります。 – jkh

関連する問題