2017-09-19 19 views
0

私はXamarin Forms with Prismを使用しています。 MasterDetail.MasterからMasterDetailの一部ではないContentPageに移動するにはどうすればよいですか(つまり、詳細を更新してMaster/Detail関係の一部にし続けたいと思いませんか?ユースケースは、ハンバーガーメニューから[設定]をクリックしたときのGmailアプリのようなものです。それはあなたをMaster/Detailから取り出して、NavigationPage/ContentPageに戻り、BackボタンをクリックしてMasterDetailページに戻ります。あなたはプリズムを使用していなかった場合はPrismを使用してXamarinフォームをマスタ詳細からコンテンツ詳細ページにナビゲートする方法

あなたは詳細ページに移動し、そこからNavigation.PushAsyncを行うことができます:

var mdp = Application.Current.MainPage as MasterDetailPage; 
mdp.IsPresented = false; 
await mdp.Detail.Navigation.PushAsync(new ContentPage2()); 

しかし、私は、この使用してプリズムのナビゲーションを行う方法が表示されません。あなたのApplication.Current.MainPageMasterDetailPageであると仮定すると、

-Steve

答えて

0

MasterDetailPageの現在のDetailNavigationPage(new ContentPage1())です。

オプション1:あなたがContentPage1の同じナビゲーションスタックにContentPage2をプッシュされます

現在のナビゲーションスタック

表示 ContentPage2あなた ContentPage1

は、あなたがContentPage2に移動する2つのオプションがあります。ナビゲーションバーの[戻る]ボタンが自動的に追加されます。

// Call this code in ContentPage1 
_navigationService.PushAsync("ContentPage2"); 

オプション2:ContentPage2モーダル

あなたはモーダルと完全に新しいナビゲーションスタックにページを提示され表示します。 NavigationBarに戻るボタンを追加し、独自のコードでclickイベントを処理する必要があります。

// Call this code in ContentPage1 
_navigationService.PushAsync("NavigationPage/ContentPage2", null, true); 
+0

はい、オプション1は実装したいものです。したがって、詳細ページのViewModelにアクセスする必要があります。マスター/ディテール関係にいくつかの詳細ページを交換しているので、私は特定の詳細ページを知らない。そのため、私は、Paramへのナビゲーションを実行するための単一のメソッド(NavigateTo(string param))を持つ詳細なViewModelクラス用のインターフェイスを作成しています。マスターViewModelから、Detail.CurrentPage.BindingContextを介して詳細ページのViewModelにアクセスし、インターフェイスにキャストしてNavigateToメソッドを呼び出しています。これを行うより良い方法はありますか? – Steve

+0

MessagingCenterを使用して、キャストの代わりにナビゲーションを行うように詳細ページViewModelに通知できます。 – lowleetak

+0

ありがとうございます。非常に役立ちます。 – Steve

関連する問題