Onapearing()方法不在xamarin形式的Mater详细信息页面中第二次触发

问题描述 投票:0回答:1

我正在使用自定义的主要详细信息页面。在该页面上,我实现了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;
        }
}

enter image description hereenter image description here

xamarin.forms navigation-drawer master-detail reloaddata
1个回答
0
投票

处理此问题的最简单方法,除了消息传递中心(传递布尔值时可能很棘手)之外,是在菜单页面中订阅主详细信息页面的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;
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.