Xamarin在关闭浏览器后在错误的页面上触发OnAppearing事件

问题描述

OnAppearing关闭浏览器browser.OpenAsync调用错误页面

我想描述这种情况:

我有2页
主要Home.xaml
ItemDetailPage.xaml

当我从Home.xaml的列表中选择一个项目时,我将执行以下操作:

async void OnItemSelected(object sender,selecteditemchangedEventArgs args)
        {
            var item = args.SelectedItem as SelectedItem;
            if (item == null)
                return;

            await Shell.Current.GoToAsync($"{nameof(ItemDetailPage)}?ItemId={item.Id}");
            ((ListView)sender).SelectedItem = null;
        }

页面ItemDetailPage.xaml中,我单击了GoToLink方法

private async void GoToLink(object sender,EventArgs e)
        {
             await browser.OpenAsync($"https://website.com/");
        }

打开浏览器之前没有任何问题,直到关闭它为止,代码调用OnAppearing()页面相关的Home.xaml并使ItemDetailPage.xaml页面保持焦点,然后按ItemDetailPage.xaml

await Shell.Current.GoToAsync("..");

屏幕返回到Home.xaml页,但没有呼叫OnAppearing()

解决方法

我正在解决此问题
通过使用MessagingCenter

正在关注:

关闭ItemDetailPage.xaml后,此页面中唯一发生的事件是OnDisappearing()
因此,在打开浏览器之前,我确实创建了一个标志IsBrowserOpened (Static variable)

ItemDetailPage.xaml

        private async void GoToLink(object sender,EventArgs e)
        {
             IsBrowserOpened= true;
             await Browser.OpenAsync($"https://website.com/");
        }
        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            if (IsBrowserOpened)
            {
                MessagingCenter.Send(this,"updateFromBrowser",1);
            }
        }

Home.xaml页面

public partial class Home : ContentPage
    {

        public Home()
        {
            InitializeComponent();
           
            MessagingCenter.Subscribe<ItemDetailPage,int>(this,async (obj,item) =>
            {
                // Update home page for incoming new data

            });

        }
}