コード例 #1
0
        private static async Task InitialisePage <TPage>(TPage page, YamvvmViewModel vm) where TPage : YamvvmPage, new()
        {
            if (vm != null)
            {
                page.BindingContext = vm;

                await InitialisePageViewModel(page, vm);
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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
            }
        }
コード例 #4
0
        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;
        }