コード例 #1
0
        private void PushRoot(Page page, IRxnPageModel model, bool hasNavBar = false)
        {
            var oldMain = _mainNavigationPage;

            if (_mainNavigationPage != null)
            {
                Pop();
            }

            _mainNavigationPage         = new HomeNavigationPage(page, hasNavBar);
            _mainNavigationPage.Popped += DisposeCurrentPageWhenBackNavigationPressed;
            new DisposableAction(() => _mainNavigationPage.Popped -= DisposeCurrentPageWhenBackNavigationPressed).DisposedBy(this);
            Swap(page, model);

            RxnApp.UIScheduler.Run(() =>
            {
                _setMainPage(page);
                //only dispose of the loginpage once we are loaded
                //top stop the going black

                RxnApp.BackgroundScheduler.Run(() =>
                {
                    if (oldMain != null)
                    {
                        DisposeOfPageResources(oldMain);
                    }
                });
            });
        }
コード例 #2
0
        private void Swap(Page page, IRxnPageModel model)
        {
            if (_appNav.Current != null)
            {
                _appNav.Current.Model.Hide();
            }

            _appNav.PushRoot(page, model);
            VerboseLogPageInfo();
        }
コード例 #3
0
        private void Push(Page page, IRxnPageModel model)
        {
            if (_appNav.Current != null)
            {
                _appNav.Current.Model.Sleep();
            }

            _appNav.Push(page, model);
            VerboseLogPageInfo();
        }
コード例 #4
0
        public Page ResolvePageWithModel(Type pageType, IRxnPageModel pageModel, object vmCfg = null, bool shouldBootstrapPage = true, bool shouldBootstrapModel = true)
        {
            var pt = pageType ?? Type.GetType(GetPageTypeName(pageModel.GetType()));

            if (pt == null)
            {
                throw new Exception(GetPageTypeName(pageModel.GetType()) + " not found");
            }

            var lifetime = _createLifeTime.BeginLifetimeScope();
            var page     = (Page)lifetime.Resolve(pt);

            pageModel.Disposes(lifetime);

            BootstrapPageModel(vmCfg, page, pageModel, shouldBootstrapPage, shouldBootstrapModel);

            return(page);
        }
コード例 #5
0
        private void ConfigureIfRequired(IRxnPageModel pageModel, object vmCfg)
        {
            OnInformation("Configuring {0}", pageModel.GetType().Name);

            var cfgDef = pageModel.GetType().GetInterfaces().FirstOrDefault(w => w.IsGenericType() && w.GetGenericTypeDefinition() == typeof(IViewModelWithCfg <>));

            if (cfgDef == null)
            {
                return;
            }

            var cfgType      = vmCfg == null ? cfgDef.GenericTypeArguments[0] : vmCfg.GetType();
            var vmTypeNeeded = typeof(IViewModelWithCfg <>).MakeGenericType(cfgType);

            //was the cfg provided of the correct type?
            if (pageModel.ImplementsInterface(vmTypeNeeded))
            {
                pageModel.Invoke("Configure", vmCfg ?? Activator.CreateInstance(cfgDef.GenericTypeArguments[0]));
            }
        }
コード例 #6
0
        private void BootstrapPageModel(object vmCfg, Page targetPage, IRxnPageModel pageModel, bool connectPage = true, bool connectModel = true)
        {
            Ensure.NotNull(pageModel, "Need to specify a pagemodel to bootstrap");

            OnVerbose("Bootstrapping model {0}", pageModel.GetType().Name);
            if (targetPage != null && targetPage.BindingContext == null)
            {
                targetPage.BindingContext = pageModel;
            }

            if (targetPage != null && connectPage)
            {
                ConnectToReactors(targetPage, pageModel);
            }

            if (connectModel)
            {
                ConnectToReactors(pageModel, pageModel);

                try
                {
                    ConfigureIfRequired(pageModel, vmCfg);
                    //lets configure the VM with the given cfg if it defines the correct configuration interface
                    pageModel.Create(); //calls show
                }
                catch (Exception e)
                {
                    if (e == null)//this happened once, seriously, with a broken observable
                    {
                        OnError("Catestrophic failure while configuring model!!! {0}", pageModel.GetType());
                        return;
                    }
                    OnError(e);
                }
            }
        }
コード例 #7
0
 public TPage ResolvePageWithModel <TPage>(IRxnPageModel pageModel, object vmCfg = null, bool shouldBootstrapPage = true, bool shouldBootstrapModel = true)
     where TPage : Page
 {
     return((TPage)ResolvePageWithModel(typeof(TPage), pageModel, vmCfg, shouldBootstrapPage, shouldBootstrapModel));
 }
コード例 #8
0
 private string Snapshot(IRxnPageModel model)
 {
     return(model.ToJson());
 }