public virtual IBasePage <TPageModel> GetPageAsNewInstance <TPageModel>(TPageModel setPageModel = null) where TPageModel : class, IBasePageModel { var pageModelType = typeof(TPageModel); var pageType = GetPageType(pageModelType); IBasePage <TPageModel> page; Func <object> pageCreationFunc; if (_pageCreation.TryGetValue(pageModelType, out pageCreationFunc)) { page = pageCreationFunc() as IBasePage <TPageModel>; } else { page = XamvvmIoC.Resolve(pageType) as IBasePage <TPageModel>; } if (setPageModel != null) { SetPageModel(page, setPageModel); } else { Func <object> pageModelCreationFunc; if (_pageModelCreation.TryGetValue(pageModelType, out pageModelCreationFunc)) { SetPageModel(page, pageModelCreationFunc() as TPageModel); } else { SetPageModel(page, XamvvmIoC.Resolve <TPageModel>()); } } return(page); }
public IBasePage <IBasePageModel> GetPageAsNewInstance(Type pageModelType) { var pageType = GetPageType(pageModelType); IBasePage <IBasePageModel> page; Func <object> pageCreationFunc; if (_pageCreation.TryGetValue(pageModelType, out pageCreationFunc)) { page = pageCreationFunc() as IBasePage <IBasePageModel>; } else { page = XamvvmIoC.Resolve(pageType) as IBasePage <IBasePageModel>; } Func <object> pageModelCreationFunc; if (_pageModelCreation.TryGetValue(pageModelType, out pageModelCreationFunc)) { SetPageModel(page, pageModelCreationFunc() as IBasePageModel); } else { SetPageModel(page, XamvvmIoC.Resolve(pageModelType) as IBasePageModel); } return(page); }
public IBasePage <IBasePageModel> GetPageAsNewInstance(Type pageModelType) { IBasePage <IBasePageModel> page; Func <object> pageCreationFunc; if (_pageCreation.TryGetValue(pageModelType, out pageCreationFunc)) { page = pageCreationFunc() as IBasePage <IBasePageModel>; } else { var pageType = typeof(MockPage <>); Type[] typeArgs = { pageModelType }; var pageGenericType = pageType.MakeGenericType(typeArgs); page = XamvvmIoC.Resolve(pageGenericType) as IBasePage <IBasePageModel>; } Func <object> pageModelCreationFunc; if (_pageModelCreation.TryGetValue(pageModelType, out pageModelCreationFunc)) { SetPageModel(page, pageModelCreationFunc() as IBasePageModel); } else { SetPageModel(page, XamvvmIoC.Resolve(pageModelType) as IBasePageModel); } return(page); }
protected virtual View CreateView(Type modelType) { var viewType = ((XamvvmFormsFactory)XamvvmCore.CurrentFactory).GetViewType(modelType); View view = XamvvmIoC.Resolve(viewType) as View; view.BindingContext = XamvvmIoC.Resolve(modelType); return(view); }
/// <summary> /// Used to register the initial navigation page model /// </summary> /// <typeparam name="TNavPageModel">Page Model for the navigation page</typeparam> /// <param name="initialPage">Page Model for the initial page to navigate to</param> /// <param name="createNavModel">TBD, defaults to null</param> /// <param name="createNav">TBD, defaults to null</param> public virtual void RegisterNavigationPage <TNavPageModel>(Func <IBasePage <IBasePageModel> > initialPage = null, Func <TNavPageModel> createNavModel = null, Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> > createNav = null) where TNavPageModel : class, IBasePageModel { // This defaults to null, when is it used? if (createNavModel != null) { Func <object> found = null; if (_pageModelCreation.TryGetValue(typeof(TNavPageModel), out found)) { _pageModelCreation[typeof(TNavPageModel)] = createNavModel; } else { _pageModelCreation.Add(typeof(TNavPageModel), createNavModel); } } // This defaults to null, when is it used? if (createNav == null) { var pageModelType = typeof(TNavPageModel); var pageType = GetPageType(pageModelType); if (initialPage == null) { createNav = new Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> >( (page) => pageType == null ? new BaseNavigationPage <TNavPageModel>() : XamvvmIoC.Resolve(pageType) as IBasePage <TNavPageModel>); } else { createNav = new Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> >( (page) => pageType == null ? new BaseNavigationPage <TNavPageModel>((Page)page) : Activator.CreateInstance(pageType, page) as IBasePage <TNavPageModel>); } } // this creates a new lambda function that will be later invoked var createNavWithPage = new Func <IBasePage <TNavPageModel> >(() => { // Take the initial page and invoke it. The page is passed in as a lambda expression that returns something of type IBasePage<T> var page = initialPage?.Invoke(); return(createNav(page)); }); Func <object> foundPageCreation = null; if (_pageCreation.TryGetValue(typeof(TNavPageModel), out foundPageCreation)) { _pageCreation[typeof(TNavPageModel)] = createNavWithPage; } else { _pageCreation.Add(typeof(TNavPageModel), createNavWithPage); } }
public virtual IBasePage <TPageModel> GetPageAsNewInstance <TPageModel>(TPageModel setPageModel = null) where TPageModel : class, IBasePageModel { var pageModelType = typeof(TPageModel); var pageType = GetPageType(pageModelType); IBasePage <TPageModel> page; Func <object> pageCreationFunc; _pageCreation.TryGetValue(pageModelType, out pageCreationFunc); // first check if we have a registered PageCreation method for this pageModelType if (pageCreationFunc != null) { page = pageCreationFunc() as IBasePage <TPageModel>; } else { // if not check if it failed because there was no registered PageType // we cannot check this earlier because for NavgationPages we allow PageModels of the NavigationPage not having a custom NavigationPage type // in this case we register a default creation method, but we won't register a pageType // !!!!!!!!! Not sure if this is the correct way to do it if (pageType == null) { throw new NoPageForPageModelRegisteredException("No PageType Registered for PageModel type: " + pageModelType); } page = XamvvmIoC.Resolve(pageType) as IBasePage <TPageModel>; if (page == null) { throw new NoPageForPageModelRegisteredException("PageType not registered in IOC: " + pageType); } } if (setPageModel != null) { SetPageModel(page, setPageModel); } else { Func <object> pageModelCreationFunc; if (_pageModelCreation.TryGetValue(pageModelType, out pageModelCreationFunc)) { SetPageModel(page, pageModelCreationFunc() as TPageModel); } else { SetPageModel(page, XamvvmIoC.Resolve <TPageModel>()); } } return(page); }
public virtual void RegisterMasterDetail <TPageModel>(Func <IBasePage <IBasePageModel> > createMasterPage, Func <IBasePage <IBasePageModel> > createDetailPage, Func <TPageModel> createMasDetModel = null, Func <IBasePage <IBasePageModel>, IBasePage <IBasePageModel>, IBasePage <TPageModel> > createMasDet = null) where TPageModel : class, IBasePageModel { if (createMasDetModel != null) { Func <object> found = null; if (_pageModelCreation.TryGetValue(typeof(TPageModel), out found)) { _pageModelCreation[typeof(TPageModel)] = createMasDetModel; } else { _pageModelCreation.Add(typeof(TPageModel), createMasDetModel); } } if (createMasDet == null) { var pageModelType = typeof(TPageModel); var pageType = GetPageType(pageModelType) ?? typeof(BaseMasterDetailPage <TPageModel>); _pageModelTypes[pageModelType] = pageType; createMasDet = new Func <IBasePage <IBasePageModel>, IBasePage <IBasePageModel>, IBasePage <TPageModel> >( (master, detail) => { var masdetPage = XamvvmIoC.Resolve(pageType) as IBasePage <TPageModel>; var masdetPageXam = (MasterDetailPage)masdetPage; masdetPageXam.Master = master as Page; masdetPageXam.Detail = detail as Page; return(masdetPage); }); } var createMasDetWithPages = new Func <IBasePage <TPageModel> >(() => { var masterPage = createMasterPage?.Invoke(); var detailPage = createDetailPage?.Invoke(); return(createMasDet(masterPage, detailPage)); }); Func <object> foundPageCreation = null; if (_pageCreation.TryGetValue(typeof(TPageModel), out foundPageCreation)) { _pageCreation[typeof(TPageModel)] = createMasDetWithPages; } else { _pageCreation.Add(typeof(TPageModel), createMasDetWithPages); } }
public virtual void RegisterMultiPage <TContainerPageModel, TFormsContainerPageType, TFormsSubPageType>( Func <IEnumerable <IBasePage <IBasePageModel> > > createSubPages, Func <TContainerPageModel> createMultModel = null, Func <IEnumerable <IBasePage <IBasePageModel> >, IBasePage <TContainerPageModel> > createMult = null) where TContainerPageModel : class, IBasePageModel where TFormsContainerPageType : MultiPage <TFormsSubPageType>, new() where TFormsSubPageType : Page { if (createMultModel != null) { Func <object> found = null; if (_pageModelCreation.TryGetValue(typeof(TContainerPageModel), out found)) { _pageModelCreation[typeof(TContainerPageModel)] = createMultModel; } else { _pageModelCreation.Add(typeof(TContainerPageModel), createMultModel); } } if (createMult == null) { var pageModelType = typeof(TContainerPageModel); var pageType = GetPageType(pageModelType) ?? typeof(TFormsContainerPageType); _pageModelTypes[pageModelType] = pageType; if (createSubPages == null) { createMult = new Func <IEnumerable <IBasePage <IBasePageModel> >, IBasePage <TContainerPageModel> >( (pages) => XamvvmIoC.Resolve(pageType) as IBasePage <TContainerPageModel>); } else { createMult = new Func <IEnumerable <IBasePage <IBasePageModel> >, IBasePage <TContainerPageModel> >( (pages) => { var multiPage = XamvvmIoC.Resolve(pageType) as IBasePage <TContainerPageModel>; var multiPageXam = (TabbedPage)multiPage; foreach (var page in pages) { multiPageXam.Children.Add((Page)page); } return(multiPage); }); } } var createMultWithPages = new Func <IBasePage <TContainerPageModel> >(() => { var pages = createSubPages?.Invoke(); return(createMult(pages)); }); Func <object> foundPageCreation = null; if (_pageCreation.TryGetValue(typeof(TContainerPageModel), out foundPageCreation)) { _pageCreation[typeof(TContainerPageModel)] = createMultWithPages; } else { _pageCreation.Add(typeof(TContainerPageModel), createMultWithPages); } }
/// <summary> /// Used to register the initial navigation page model /// </summary> /// <typeparam name="TNavPageModel">Page Model for the navigation page</typeparam> /// <param name="initialPage">Page Model for the initial page to navigate to</param> /// <param name="createNavModel">TBD, defaults to null</param> /// <param name="createNav">TBD, defaults to null</param> public virtual void RegisterNavigationPage <TNavPageModel>(Func <IBasePage <IBasePageModel> > initialPage = null, Func <TNavPageModel> createNavModel = null, Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> > createNav = null) where TNavPageModel : class, IBasePageModel { // This defaults to null, when is it used? if (createNavModel != null) { Func <object> found = null; if (_pageModelCreation.TryGetValue(typeof(TNavPageModel), out found)) { _pageModelCreation[typeof(TNavPageModel)] = createNavModel; } else { _pageModelCreation.Add(typeof(TNavPageModel), createNavModel); } } // This defaults to null, when is it used? if (createNav == null) { var pageModelType = typeof(TNavPageModel); var pageType = GetPageType(pageModelType) ?? typeof(BaseNavigationPage <TNavPageModel>); _pageModelTypes[pageModelType] = pageType; if (initialPage == null) { createNav = new Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> >( (page) => XamvvmIoC.Resolve(pageType) as IBasePage <TNavPageModel>); } else { try { createNav = new Func <IBasePage <IBasePageModel>, IBasePage <TNavPageModel> >( (page) => Activator.CreateInstance(pageType, page) as IBasePage <TNavPageModel>); } catch (MissingMemberException) { throw new MissingMemberException(pageType + " is missing a constructor that accepts a child page as parameter"); } } } // this creates a new lambda function that will be later invoked var createNavWithPage = new Func <IBasePage <TNavPageModel> >(() => { // Take the initial page and invoke it. The page is passed in as a lambda expression that returns something of type IBasePage<T> var page = initialPage?.Invoke(); return(createNav(page)); }); Func <object> foundPageCreation = null; if (_pageCreation.TryGetValue(typeof(TNavPageModel), out foundPageCreation)) { _pageCreation[typeof(TNavPageModel)] = createNavWithPage; } else { _pageCreation.Add(typeof(TNavPageModel), createNavWithPage); } }
public ViewNavigation() { BindingContext = XamvvmIoC.Resolve <TViewNavigationPageModel>(); XamvvmIoC.RegisterSingleton <IViewNavigation <TViewNavigationPageModel> >(this); }