通常,使用NavigationStack中的一个弹出当前页面:
Navigation.PopAsync( true );
如何使用Navigation
重绘当前页面之前的页面?
背景:当前页面改变了需要重新呈现在一页但最后一页的内容。
答案 0 :(得分:8)
我假设您使用的数据模型不可观察/可绑定,因此页面不会“自动更新”......
您可以使用MessagingCenter
发布“刷新事件”,以避免将两个Page
与事件耦合...
在您的主页中:
MessagingCenter.Subscribe<MainPage> (this, "RefreshMainPage", (sender) => {
// Call your main page refresh method
});
在你的第二页:
MessagingCenter.Send<MainPage> (this, "RefreshMainPage");
Navigation.PopAsync( true );
https://developer.xamarin.com/guides/xamarin-forms/messaging-center/
答案 1 :(得分:3)
以下是让hvaughan3的解决方案为我工作所必须做的事情:
private async void OnGoToPage2Clicked(object sender, EventArgs args) {
Page2 page2 = new Page2();
page2.Disappearing += Page2_Disappearing;
await Navigation.PushAsync(page2);
}
private void Page2_Disappearing(object sender, EventArgs e) {
this.Refresh(); // what your refresh or init function is.
}
当我看到这个解决方案时,我喜欢它作为我的选择,因为我真的很喜欢使用事件来解决我的大部分问题。谢谢hvaughan3!
答案 2 :(得分:2)
正如@SushiHangover所说,MessagingCenter
是个不错的选择。
另一种方法是从page1订阅Page2的OnDisappearing()
事件并对Page1 UI /数据执行某些操作,如下所示:
编辑:我回答这个问题的旧方法(请参阅更改日志)确实有效,但在看到其他人的示例后,我已经修改了我的工作方式,以防止内存泄漏。最好在使用后取消订阅Disappearing
事件。如果您打算再次使用它,那么您可以在PushAsync()
实例上再次运行Page2
之前重新订阅它:
private async void OnGoToPage2Clicked(object sender, EventArgs args) {
Page2 page2 = new Page2();
page2.Disappearing += OnPage2Disappearing;
await Navigation.PushAsync(page2);
}
private async void OnPage2Disappearing(object sender, EventArgs eventArgs) {
await _viewModel.RefreshPage1Data(); //Or how ever you need to refresh the data
((Page2)sender).Disappearing -= OnPage2Disappearing; //Unsubscribe from the event to allow the GC to collect the page and prevent memory leaks
}