我正在使用自定义的主要详细信息页面。在该页面上,我实现了onAppearing()方法。它是第一次触发(当我运行程序时。主详细信息页面是我的应用程序的根页面)。当我单击汉堡包图标以打开导航抽屉时,该OnAppearing()没有启动。
MasterDetailsPage CS代码:
public partial class MainMasterDetailPage : MasterDetailPage
{
public MainMasterDetailPage()
{
InitializeComponent();
NavigationPage.SetHasBackButton(this, false);
NavigationPage.SetHasNavigationBar(this, false);
ListOfSettings.IsVisible = false;
this.IsPresented = false;
Detail = new NavigationPage(new DashboardTabbedPage());
}
protected override async void OnAppearing()
{
base.OnAppearing();
ListOfSettings.IsVisible = false;
}
}
处理此问题的最简单方法,除了消息传递中心(传递布尔值时可能很棘手)之外,是在菜单页面中订阅主详细信息页面的IsPresentedChanged事件处理程序。伪代码示例:
namespace TestApp.Views
{
public partial class MenuPage : ContentPage
{
MainPage RootPage { get => Application.Current.MainPage as MainPage; }
List<HomeMenuItem> menuItems;
public MenuPage()
{
InitializeComponent();
BindingContext = this;
menuItems = new List<HomeMenuItem>
{
new HomeMenuItem {Id = MenuItemType.Browse, Title="Browse" },
new HomeMenuItem {Id = MenuItemType.About, Title="About" }
};
ListViewMenu.ItemsSource = menuItems;
ListViewMenu.SelectedItem = menuItems[0];
ListViewMenu.ItemSelected += async (sender, e) =>
{
if (e.SelectedItem == null)
return;
var id = (int)((HomeMenuItem)e.SelectedItem).Id;
RootPage.IsPresentedChanged += MenuVisibleChanged;
await RootPage.NavigateFromMenu(id);
};
}
private void MenuVisibleChanged(object sender, EventArgs e)
{
//handle your menu visibilty here with calling IsPresented
var menuIsVisible = RootPage.IsPresented;
}
}
}