Метод OnApearing () не запускается второй раз на странице сведений о Mater форм xamarin

Я использую пользовательскую страницу с основными данными. На этой странице я реализовал метод onAppearing (). Он запускается впервые (когда я запускаю программу. Страница сведений о мастере является корневой страницей моего приложения). Когда я щелкнул значок гамбургера, чтобы открыть панель навигации, эта функция OnAppearing () не запускается.

Код CS MasterDetailsPage:

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;
        }
}

введите описание изображения здесь введите описание изображения здесь

Всего 2 ответа


Самый простой способ справиться с этим, за исключением центра обмена сообщениями (что может быть сложно при передаче значения bool), состоит в том, чтобы подписаться на обработчик событий 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;
        }
    }
}

Я использовал свойство IsPresentedChanged . Пожалуйста, проверьте код ниже.

public MainMasterDetailPage()
        {
            InitializeComponent();

            NavigationPage.SetHasBackButton(this, false);
            NavigationPage.SetHasNavigationBar(this, false);
            ListOfSettings.IsVisible = false;
            this.IsPresented = false;
            Detail = new NavigationPage(new DashboardTabbedPage());

            this.IsPresentedChanged += hideSettingMenu;

        }
        public void hideSettingMenu(object sender, EventArgs args)
        {
            ListOfSettings.IsVisible = false;
        }

Есть идеи?

10000