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); } }); }); }
private void Swap(Page page, IRxnPageModel model) { if (_appNav.Current != null) { _appNav.Current.Model.Hide(); } _appNav.PushRoot(page, model); VerboseLogPageInfo(); }
private void Push(Page page, IRxnPageModel model) { if (_appNav.Current != null) { _appNav.Current.Model.Sleep(); } _appNav.Push(page, model); VerboseLogPageInfo(); }
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); }
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])); } }
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); } } }
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)); }
private string Snapshot(IRxnPageModel model) { return(model.ToJson()); }