示例#1
0
        protected void PushPageModel <T> (object data) where T : BasePageModel
        {
            BasePageModel pageModel = TinyIoC.TinyIoCContainer.Current.Resolve <T>();;

            var page = ResolvePageModel <T> (data, pageModel);

            pageModel.PreviousPageModel = this;

            IRootNavigation rootNav = TinyIoC.TinyIoCContainer.Current.Resolve <IRootNavigation> ();

            rootNav.PushPage(page, pageModel);
        }
示例#2
0
        public static Page ResolvePageModel <T>(object data, BasePageModel pageModel)
            where T : BasePageModel
        {
            var name     = typeof(T).Name.Replace("Model", string.Empty);
            var pageType = Type.GetType("QuoteApp.Pages." + name);
            var page     = (Page)TinyIoC.TinyIoCContainer.Current.Resolve(pageType);

            page.BindingContext = pageModel;

            var initMethod = TinyIoC.TypeExtensions.GetMethod(typeof(T), "Init");

            if (initMethod != null)
            {
                if (initMethod.GetParameters().Length > 0)
                {
                    initMethod.Invoke(pageModel, new object[] { data });
                }
                else
                {
                    initMethod.Invoke(pageModel, null);
                }
            }

            var vmProperty = TinyIoC.TypeExtensions.GetProperty(pageType, "PageModel");

            if (vmProperty != null)
            {
                vmProperty.SetValue(page, pageModel);
            }

            var vmPageBindingContext = TinyIoC.TypeExtensions.GetProperty(pageType, "BindingContext");

            if (vmPageBindingContext != null)
            {
                vmPageBindingContext.SetValue(page, pageModel);
            }

            var initMethodPage = TinyIoC.TypeExtensions.GetMethod(pageType, "Init");

            if (initMethodPage != null)
            {
                initMethodPage.Invoke(page, null);
            }

            return(page);
        }