2017-08-21 4 views
0

PROBLEMパスMVVMプリズムナビゲーション引数

やあやあやあSO。

mvvm prismを使用したマスター詳細ページアプリがあります。ユーザーが自分のアプリにログインすると、ログインページからマスターページに移動します。ログインページのナビゲーションパラメータをユーザに渡したい詳細ページがマスターページ内にネストされています。 。 。詳細ページはマスターページのXAMLにネストされているため、引数を正しく渡す問題があります。

<MasterDetailPage.Master> 
     <pages:HamburgerMenu x:Name="HamburgerMenu" /> 
    </MasterDetailPage.Master> 
    <MasterDetailPage.Detail> 
     <NavigationPage> 
      <x:Arguments> 
       <pages:UserPage x:Name="UserPage" /> 
      </x:Arguments> 
     </NavigationPage> 
    </MasterDetailPage.Detail> 

app.xaml.csユーザーがログイン後、メニューやユーザページをレンダリングする権利ここ

APP構造

マスターPage.xamlをちょっといいUI Loginページをレンダリングするアプリケーションのエントリポイントは、メニュー項目の一部ではなく、マスター詳細ページに関連付けられた方法であるこれは、そして合格含むネストされた詳細ページを持っているマスターページに私のデータベースから一部のユーザー情報を渡ししようとする際に、ユーザのログイン・ページ - viewmodel.cs

protected override void OnInitialized() 
    { 
     InitializeComponent(); 
     MainPage = new LoginPage(); 
    } 
マスター詳細ページへ
ロギングを食べましたデータバインドされたユーザー名フィールド。

public NavigationParameters np = new NavigationParameters(); 

    // magic code everywhere 

    private async void LoginAsync() 
     { 
      var user = await LoginAttemptAsync(_awsomePassword); 

      np.Add("UserName", user.name); 

      await _navigationService.NavigateAsync("MasterPage", np); 
     } 

答えて

0

は、私はそれを固定NavigationPage、私のUserPageが含まれるように、ナビゲーション文字列を変更すると思います。他の人のフィードバックを待っています。今すぐ正解として受け入れる。 FIXED

BUGGYのCODE

ログインページ-viewmodel.cs

public NavigationParameters np = new NavigationParameters(); 

    // magic code everywhere 

    private async void LoginAsync() 
     { 
      var user = await LoginAttemptAsync(_awsomePassword); 

      np.Add("UserName", user.name); 

      await _navigationService.NavigateAsync("MasterPage", np); 
     } 

ではなく、ベストプラクティス

*プリズムを使用している場合、あなたはあなたを構築すべきですURIを介したナビゲーションスタック。これはまた、プリズムは、他人からのフィードバックを待っている必要があれば、あなたがそれらに依存性を注入できるようにする)あなたの意見を解決

ログインページ-viewmodel.cs

public NavigationParameters np = new NavigationParameters(); 

    // magic code everywhere 

    private async void LoginAsync() 
     { 
      var user = await LoginAttemptAsync(_awsomePassword); 

      np.Add("UserName", user.name); 

      await _navigationService.NavigateAsync("MasterPage/Navigation/UserPage", np); 
     } 

することができます。

+0

XAMLで詳細を指定しないでください。ナビゲーションURIから来る必要があります。 –

+0

ドキュメントはXAMLの詳細を指定しています。https://developer.xamarin.com/guides/xamarin-forms/application- '' '' ''を使って、基本/ナビゲーション/マスター詳細ページ/それはベストプラクティスではないのですか? –

+1

いいえ.Prismを使用するときは、URI経由でナビゲーションスタックを構築する必要があります。これにより、Prismはビューを解決して、必要に応じて依存関係を注入することもできます。 –

関連する問題