/// <summary> /// method to Initialize Navigation service in app class where we can write how we will begin app navigation /// </summary> /// <param name="master"></param> /// <param name="detail"></param> /// <param name="masterDetailPage"></param> /// <param name="hasNavBar"></param> /// <returns></returns> public static void SetHomePage(PageContainer master, PageContainer detail, MasterDetailPage masterDetailPage = null, bool hasNavBar = false) { _resolve = LocatorService.Instance.Resolve <IReflectionResolve>(); if (master == null || detail == null) { throw new ArgumentNullException(); } master.IsNavigationPage = true; var masterViewModel = master.ViewModel; var masterPage = _resolve.CreatePage(masterViewModel.GetType()); if (string.IsNullOrEmpty(masterPage.Title)) { masterPage.Title = "Master Title"; } var detailViewModel = detail.ViewModel; var detailPage = _resolve.CreatePage(detailViewModel.GetType()); if (masterDetailPage == null) { masterDetailPage = new MasterDetailPage(); } masterDetailPage.Master = masterPage; masterDetailPage.Detail = detail.IsNavigationPage ? new NavigationPage(detailPage) : detailPage; Application.Current.MainPage = masterDetailPage; masterViewModel.InitializeAsync(master.Parameter); detailViewModel.InitializeAsync(detail.Parameter); }
private async Task InternalNavigateToAsync(Type viewModelType, object parameter) { var page = _resolve.CreatePage(viewModelType); if (Navigation != null && Navigation.NavigationStack.Count > 0 && page != null) { await Navigation.PushAsync(page, false); if (page.BindingContext is BaseViewModel viewModel) { viewModel.InternalInitialize(parameter); } } }
/// <summary> /// method to Initialize Navigation service in app class where we can write how we will begin app navigation /// </summary> /// <typeparam name="TViewModel"></typeparam> /// <param name="parameter"></param> /// <param name="isNavigationPage"></param> /// <returns></returns> public static void SetHomePage <TViewModel>(object parameter = null, bool isNavigationPage = false) { _resolve = LocatorService.Instance.Resolve <IReflectionResolve>(); var page = _resolve.CreatePage(typeof(TViewModel)); Application.Current.MainPage = isNavigationPage ? new NavigationPage(page) : page; if (page == null) { return; } if (page.BindingContext is BaseViewModel viewModel) { viewModel.InternalInitialize(parameter); } }
/// <summary> /// method to Initialize Navigation service in app class where we can write how we will begin app navigation /// </summary> /// <param name="pageContainers"></param> /// <param name="tabbedPage"></param> /// <param name="hasNavBar"></param> /// <returns></returns> public static void SetHomePage(IList <PageContainer> pageContainers, TabbedPage tabbedPage = null, bool hasNavBar = false) { _resolve = LocatorService.Instance.Resolve <IReflectionResolve>(); if (pageContainers.Count <= 1) { return; } if (tabbedPage == null) { tabbedPage = new TabbedPage(); } tabbedPage.CurrentPageChanged += (sender, args) => { var currentPage = ((TabbedPage)sender).CurrentPage; if (currentPage is NavigationPage navigationPage) { var firstPage = navigationPage.Navigation.NavigationStack.FirstOrDefault(); if (firstPage == null) { return; } currentPage = firstPage; } if (!(currentPage.BindingContext is BaseViewModel viewModel)) { return; } var pageContainer = pageContainers.FirstOrDefault(x => x.ViewModel.GetType() == viewModel.GetType()); var parameter = pageContainer?.Parameter; viewModel.InternalInitialize(parameter); }; foreach (var pageContainer in pageContainers) { var viewModelType = pageContainer.ViewModel; var page = _resolve.CreatePage(viewModelType.GetType()); tabbedPage.Children.Add(pageContainer.IsNavigationPage ? new NavigationPage(page) : page); } Application.Current.MainPage = tabbedPage; }
public void RemoveFromNavigationModalAsync <TViewModel>() where TViewModel : BaseViewModel { var page = _resolve.CreatePage(typeof(TViewModel)); Navigation?.RemovePage(page); }