2016-06-14 18 views
6

Aşağıdaki senaryoyu düşünün:PopAsync kullanarak önceki sayfaya nasıl veri aktarılır?

  1. Kullanıcı bazı Page O belirli bir eylemi bitirdikten sonra Page 2 (await Navigation.PushAsync(new SomePage()); çağırarak)
  2. onu taşır düğmesini tıkladığında 1
  3. üzerine, o "Tamam" tıklar düğme
  4. "Tamam" ı tıkladıktan sonra, uygulama Page 1'e geçmek için PopAsync'i çağırır ve orada bazı veriler gönderir (Sayfa 2'deki işlemin sonucu).

Sayfa 1 sayfa 1'deki verileri nasıl alabilirim?

+0

ViewModels'i kullanıyor musunuz? – jzeferino

+0

Hangi yolla? Ne için? – Piotrek

+0

Sayfalar ile ilişkilendirilmiş ViewModels'i kullanarak sayfalar arasında verileri paylaşması kolaydır. – jzeferino

cevap

6

En iyi yol (IMO), bir olayı yükseltmek suretiyle menüyü kaynak sayfadan işlemek olur. Böyle bir şey:

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

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

Sen here üzerinde bu konuda daha fazla okuyabilirsiniz dan - Gerçekten iyi makale

Diğer bir seçenek MessagingCenter

kullanmaktır
+0

Kesişen görünüyor. "Uygulama" dan daha geniş bir sınıfta olmama rağmen bunu yapmak mümkün mü? Demek istediğim: Page 1 (Sayfa 2'yi başlatmak istediğim yerden), MainPage değişkeni gibi bir şey olmayan ContentPage'tir. – Piotrek

+0

Evet, bu mümkün. –

2

Ya da yanıtımı here veya SushiHangover'ın cevabını aynı şekilde kullanabilirsiniz sayfa.

Cevabım ContentPage'da çalışacak ve SushiHangover's her yerde çalışacak.

Benim cevabım, PushAsync() yapmadan önce Page 1 sayfasından ContentPage.OnDisappearing üyeliğine abone olmayı içerir. Veri Page 2 bir DB kaydedilir değiştirilmesini Eğer

, sadece her zaman Sayfa 2. OnAppearing() olur tarihinde değiştirildi yeni veri seçip olur DB, taze çekmeye Sayfa 1'in OnAppearing() olayını kullanabilirsiniz Sayfa 2 atıldıktan sonra çalıştırılacak ve kullanıcı Page 1

İlgili konular