如何刷新导航上的一个但最后一个ContentPage

通常,使用NavigationStack中的一个弹出当前页面:

Navigation.PopAsync( true ); 

如何使用Navigation重绘当前页面之前的页面?

背景:当前页面改变了需要在一页但最后一页重新呈现的内容。

我假设您使用的数据模型不可观察/可绑定,因此页面不是“自动更新”…

您可以使用MessagingCenter发布“刷新事件”以避免将两个Page与事件耦合…

在您的MainPage中:

 MessagingCenter.Subscribe (this, "RefreshMainPage", (sender) => { // Call your main page refresh method }); 

在你的第二页:

  MessagingCenter.Send (this, "RefreshMainPage"); Navigation.PopAsync( true ); 

https://developer.xamarin.com/guides/xamarin-forms/messaging-center/

以下是让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!

正如@SushiHangover所说, MessagingCenter是一个不错的选择。

另一种方法是从page1订阅Page2的OnDisappearing()事件,并对Page1 UI /数据执行某些操作,如下所示:

编辑:我回答这个问题的旧方法(请参阅更改日志)确实有效,但在看到其他人的示例后,我已经修改了我的工作方式,以防止内存泄漏。 最好在使用后取消订阅Disappearing事件。 如果您打算再次使用它,那么您可以在您的Page2实例上再次运行PushAsync()之前重新订阅它:

 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 }