public static Page ResolveViewModel <T>(object data, BasePageModel viewModel) where T : BasePageModel { var name = typeof(T).Name.Replace("Model", string.Empty); var pageType = Type.GetType("JellyBeanTracker.Mobile.Pages." + name); var page = (Page)TinyIoC.TinyIoCContainer.Current.Resolve(pageType); page.BindingContext = viewModel; var initMethod = TinyIoC.TypeExtensions.GetMethod(typeof(T), "Init"); if (initMethod != null) { if (initMethod.GetParameters().Length > 0) { if (data == null) { data = new object(); } initMethod.Invoke(viewModel, new object[] { data }); } else { initMethod.Invoke(viewModel, null); } } var vmProperty = TinyIoC.TypeExtensions.GetProperty(pageType, "PageModel"); if (vmProperty != null) { vmProperty.SetValue(page, viewModel); } var vmPageBindingContext = TinyIoC.TypeExtensions.GetProperty(pageType, "BindingContext"); if (vmPageBindingContext != null) { vmPageBindingContext.SetValue(page, viewModel); } var initMethodPage = TinyIoC.TypeExtensions.GetMethod(pageType, "Init"); if (initMethodPage != null) { initMethodPage.Invoke(page, null); } return(page); }
protected void PushViewModel <T> (object data, bool model = false) where T : BasePageModel { BasePageModel viewModel = TinyIoC.TinyIoCContainer.Current.Resolve <T>();; var page = ResolveViewModel <T> (data, viewModel); viewModel.PreviousViewModel = this; ITabbedNavigation tabbedNav = TinyIoC.TinyIoCContainer.Current.Resolve <ITabbedNavigation> (); if (!model) { tabbedNav.PushView(viewModel, page, model); } else { var navContainer = new BaseNav(page); tabbedNav.PushView(viewModel, navContainer, model); } }