2016-06-14 15 views
6

次のシナリオを検討してください:PopAsyncを使用して前のページにデータを渡す方法は?

  1. ユーザーは、いくつかのページ1
  2. である彼は、特定のアクションを終えた後、2ページに彼を移動ボタン(await Navigation.PushAsync(new SomePage());を呼び出す)
  3. をクリックすると、彼は「OK」をクリックボタン
  4. 「OK」をクリックすると、アプリケーションはPopAsyncを呼び出してページ1に移動し、そこにいくつかのデータ(2ページのアクティビティの結果)を送信します。

ページ1のページ2からデータを受信するにはどうすればよいですか?

+0

ViewModelsを使用していますか? – jzeferino

+0

どのようにですか?何のために? – Piotrek

+0

Pagesに関連付けられたViewModelを使用している場合、ページ間で簡単にデータを共有できます。 – jzeferino

答えて

6

イベントを呼び出すことによって、元のページからポップを処理するのが最善の方法です(IMO)。 - 本当に良い記事

別のオプションは、MessagingCenter

を使用することです

public class LoginPage : ContentPage 
{ 
    public event EventHandler LoginSucceeded; 

    public event EventHandler LoginFailed; 

    private void OnLoginSucceeded() 
    { 
     if (LoginSucceeded != null) 
     { 
      LoginSucceeded(this, EventArgs.Empty); 
     } 
    } 

    private void OnLoginFailed() 
    { 
     if (LoginFailed != null) 
     { 
      LoginFailed(this, EventArgs.Empty); 
     } 
    } 
} 

とapp.cs

public class App : Application 
{ 
    public App() 
    { 
     var loginPage = new LoginPage(); 
     loginPage.LoginSucceeded += HandleLoginSucceeded; 
     MainPage = loginPage; 
    } 

    private void HandleLoginSucceeded(object sender, EventArgs e) 
    { 
     MainPage = new MainPage(); 
    } 
} 

からあなたはhere上でそれについての詳細を読むことができます:このような何か

+0

interesingに見えます。私が "Application"から派生したクラスでないなら、それは可能ですか?つまり、私がページ2を立ち上げたい場所からの私のページ1は、MainPage変数のようなものがないContentPageです。 – Piotrek

+0

はい、可能です。 –

2

あなたは私の答えhereまたはSushiHangoverの回答を同じページ。

私の答えはContentPageで動作し、SushiHangover'sはどこでも動作します。

私の答えはPushAsync()を実行する前にPage 1からContentPage.OnDisappearingに登録することです。

ページ2のDBにデータが保存されている場合は、ページ1のOnAppearing()イベントを使用して、常にDBから新しいデータを取り出すことができます。ページ2で変更された新しいデータが引き込まれます。OnAppearing()ページ2がポップされ、ユーザーがページ1に戻ると実行されます。

関連する問題