示例#1
0
        /// <summary>
        /// Navigate from the MenuPage
        /// </summary>
        /// <param name="id">The page to navigate to</param>
        /// <returns></returns>
        public async Task NavigateFromMenu(MenuItemType id)
        {
            // if the page has not already been created, create one and add to the MenuPages list
            if (!MenuPages.ContainsKey(id))
            {
                switch (id)
                {
                case MenuItemType.SevenDayView:
                    MenuPages.Add(id, new NavigationPage(new SevenDayPage(ViewModel.UserData)));
                    break;

                case MenuItemType.WeeklyView:
                    MenuPages.Add(id, new NavigationPage(new WeeklyPage(ViewModel.UserData)));
                    break;

                case MenuItemType.MonthlyView:
                    MenuPages.Add(id, new NavigationPage(new MonthlyPage(ViewModel.UserData)));
                    break;

                case MenuItemType.DishDB:
                    MenuPages.Add(id, new NavigationPage(new DishDBPage(ViewModel.UserData)));
                    break;

                case MenuItemType.DishCategories:
                    MenuPages.Add(id, new NavigationPage(new DishCategoriesPage(ViewModel.UserData)));
                    break;

                case MenuItemType.About:
                    MenuPages.Add(id, new NavigationPage(new AboutPage()));
                    break;
                }
            }

            // change the Detail of the MasterDetailPage to the chosen Page
            NavigationPage newPage = MenuPages[id];

            if (newPage != null && Detail != newPage)
            {
                // get the ViewModel of the chosen page and fill the DisplayDays upon entering
                BaseViewModel?viewModel = null;
                switch (id)
                {
                case MenuItemType.SevenDayView:
                    viewModel = (SevenDayViewModel)newPage.Navigation.NavigationStack[0].BindingContext;
                    break;

                case MenuItemType.WeeklyView:
                    viewModel = (WeeklyViewModel)newPage.Navigation.NavigationStack[0].BindingContext;
                    break;

                case MenuItemType.MonthlyView:
                    viewModel = (MonthlyViewModel)newPage.Navigation.NavigationStack[0].BindingContext;
                    break;
                }
                viewModel?.FillDisplayDays();

                Detail = newPage;

                if (Device.RuntimePlatform == Device.Android)
                {
                    await Task.Delay(100);
                }
            }
            IsPresented = false;                // close the menu
        }