Reputation: 11211
Consider the following scenario:
await Navigation.PushAsync(new SomePage());
)How can I receive data from Page 2 in Page 1?
Upvotes: 18
Views: 17217
Reputation: 11105
You could use either my answer here or SushiHangover's answer on the same page.
My answer will work in a ContentPage
and SushiHangover's will work anywhere.
My answer involves subscribing to ContentPage.OnDisappearing
from Page 1 before doing your PushAsync()
.
If the data being changed is saved to a DB in Page 2, you can just use Page 1's OnAppearing()
event to always pull fresh from the DB, which would pull in the new data that was changed on Page 2. OnAppearing()
would get executed after Page 2 is popped and the user is returning to Page 1.
Upvotes: 7
Reputation: 1261
The best way (IMO) would be to handle the pop from the originating page by raising an event. Something like this:
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);
}
}
}
and from 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();
}
}
You can read more about it over here -- Really good article
Another option is to use MessagingCenter
Upvotes: 16