如何使用PopAsync将数据传递到上一页?
请考虑以下情形:
- 用户在某些页面上
- 他点击按钮将他移动到第2页(调用
await Navigation.PushAsync(new SomePage());
) - 完成某些操作后,他点击“确定”按钮
- 单击“确定”后,应用程序调用PopAsync移动到第1页并向其发送一些数据(第2页上的活动结果)。
如何从第1页的第2页接收数据?
最好的方法(IMO)是通过引发事件来处理来自原始页面的弹出窗口。 像这样的东西:
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(); } }
你可以在这里阅读更多相关内容 – 非常好的文章
另一种选择是使用MessagingCenter
您可以在此处使用我的答案或在同一页面上使用SushiHangover的答案。
我的回答将在ContentPage
工作,而SushiHangover将在任何地方工作。
我的回答涉及在执行PushAsync()
之前订阅ContentPage.OnDisappearing
从第1页出现。
如果要更改的数据保存到第2页的数据库中,您可以使用Page 1的OnAppearing()
事件始终从数据库中提取新内容,这将提取第2页上更改的新数据OnAppearing()
将在弹出第2页并且用户返回到第1页后执行。