问题描述
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
});
}
}