private static async Task InitialisePage <TPage>(TPage page, YamvvmViewModel vm) where TPage : YamvvmPage, new() { if (vm != null) { page.BindingContext = vm; await InitialisePageViewModel(page, vm); } }
/// <summary> /// Set MainPage to a Master Detail page container. /// Also initializes all viewmodels. /// </summary> /// <typeparam name="TPage">Must be of type TabbedPage.</typeparam> /// <returns></returns> public static async Task SetMasterDetailPage <TMasterPage, TDetailPage>(int pageIndex = 0, YamvvmViewModel masterDetailViewModel = null, PageViewModel masterViewModel = null, PageViewModel detailViewModel = null) where TMasterPage : YamvvmPage, new() where TDetailPage : YamvvmPage, new() { MasterDetailPage masterDetailPage = new MasterDetailPage(); TMasterPage masterPage = new TMasterPage(); TDetailPage detailsPage = new TDetailPage(); masterDetailPage.Master = masterPage; masterDetailPage.Detail = new NavigationPage(detailsPage); var initTasks = new List <Task>(); if (masterDetailViewModel != null) { masterDetailPage.BindingContext = masterDetailViewModel; initTasks.Add(masterDetailViewModel.Initialise()); } if (masterViewModel != null) { masterPage.BindingContext = masterViewModel; initTasks.Add(masterViewModel.Initialise()); } if (detailViewModel != null) { detailsPage.BindingContext = detailViewModel; initTasks.Add(detailViewModel.Initialise()); } Device.BeginInvokeOnMainThread(() => { Application.Current.MainPage = masterDetailPage; }); await CleanupPreviousMainPage(); await Task.WhenAll(initTasks); }
private static async Task InitialisePageViewModel(YamvvmPage page, YamvvmViewModel vm) { if (page != null && vm != null) { vm.ModelPage = page; vm.ModelReady += page.ModelReady; #if DEBUG var vmtype = vm.GetType().Name; var sw = System.Diagnostics.Stopwatch.StartNew(); System.Diagnostics.Debug.WriteLine("Starting init of VM {0}", vmtype); #endif await vm.Initialise(); #if DEBUG sw.Stop(); System.Diagnostics.Debug.WriteLine("Finished init of VM {0} ({1}ms)", vmtype, sw.ElapsedMilliseconds); #endif } }
private static async Task Push <TPage>(PageViewModel currentViewModel, YamvvmViewModel vm, Func <INavigation, TPage, Task> pushTask) where TPage : YamvvmPage, new() { TPage page = new TPage(); Task initialiseViewModelTask = InitialisePage(page, vm); INavigation navigation; if (currentViewModel.ModelPage.Navigation == null) { navigation = GetNavigation(); } else { //navigation = GetNavigation(); navigation = currentViewModel.ModelPage.Navigation; } if (navigation != null) { Device.BeginInvokeOnMainThread(async() => await pushTask(navigation, page)); } await initialiseViewModelTask; }