为什么Navigation.PopAsync()不触发基础页面的OnAppearing方法?

时间:2018-10-02 00:46:07

标签: xamarin xamarin.forms

我的Xamarin表单Application的{​​{1}}设置为

MainPage

其中new NavigationPage(new CarsMasterDetailPage())

CarsMasterDetailPage : MasterDetailPage构造函数中,我将CarsMasterDetailPage属性设置为Master,并将new CarsMasterPage()属性设置为Detailnew CarsDetailPage()CarsMasterPage都扩展了CarsDetailPage

主页包含一个汽车列表和一个按钮,该按钮具有执行以下操作的事件处理程序:

ContentPage

await Navigation.PushAsync(new AddCar()); 页面上有一个带有事件处理程序的按钮,该按钮执行以下操作:

AddCar

当我第一次运行该应用程序时,将调用母版页的await Navigation.PopAsync(); 方法。导航第一次弹出回到主页时,再次调用OnAppearing。但是,随后的导航推送和弹出窗口却没有。

我可以通过在母版页上添加添加汽车页面完成时调用的委托来解决这个问题,但是由于有一些页面事件可以处理,所以这感觉很骇人。有谁知道为什么它不起作用?

2 个答案:

答案 0 :(得分:1)

就我而言,我是这样做的,并且一切正常: 我的主页:

MainPage = new MasterDetailPage {
                Master = new MasterDetailPage1Master(),
                Detail = new MyNavigationPage(new MainPageLinearList(appType))
            };

所以关键是要在DetailPage中使用NavigationPage。之后,一切正常。

答案 1 :(得分:0)

订阅NavigationPage.Popped事件:

navigationPage.Popped += OnPopped;

...

void OnPopped(object sender, NavigationEventArgs e)
{
    var currentPage = (sender as NavigationPage).CurrentPage;
    var removedPage = e.Page;
    ...
}