protected IMvxViewModel LoadModel(MvxShowViewModelRequest request)
        {
            var viewModelLocatorFinder = this.GetService <IMvxViewModelLocatorFinder>();
            var viewModelLocator       = viewModelLocatorFinder.FindLocator(request);

            if (viewModelLocator == null)
            {
                throw new MvxException("Sorry - somehow there's no viewmodel locator wired up for {0} looking for {1}",
                                       GetType().Name, typeof(T).Name);
            }

            if (viewModelLocator.ViewModelType != typeof(T))
            {
                throw new MvxException(
                          "Sorry - somehow view {0} has been wired up to viewmodel type {1} but received a request to show viewmodel type {2}",
                          GetType().Name, typeof(T).Name, viewModelLocator.ViewModelType.Name);
            }


            IMvxViewModel model = null;

            if (!viewModelLocator.TryLoad(request.ViewModelAction.ActionName, request.ParameterValues, out model))
            {
                throw new MvxException(
                          "Failed to load ViewModel for type {0} action {1}",
                          typeof(T).Name, request.ViewModelAction.ActionName);
            }

            return(model);
        }
        public IMvxMacView CreateView(MvxShowViewModelRequest request)
        {
            var viewType = GetViewType(request.ViewModelType);

            if (viewType == null)
            {
                throw new MvxException("View Type not found for " + request.ViewModelType);
            }

            var view = Activator.CreateInstance(viewType) as IMvxMacView;

            if (view == null)
            {
                throw new MvxException("View not loaded for " + viewType);
            }

            var requestProperty = view.GetType().GetProperty("ViewModelRequest");

            if (requestProperty == null)
            {
                throw new MvxException("ViewModelRequest Property missing for " + view.GetType());
            }
            requestProperty.SetValue(view, request, null);

            return(view);
        }
예제 #3
0
        public IMvxViewModel LoadViewModel(MvxShowViewModelRequest request)
        {
            if (request.ViewModelType == typeof(MvxNullViewModel))
            {
                return(new MvxNullViewModel());
            }

            var viewModelLocatorFinder = this.GetService <IMvxViewModelLocatorFinder>();
            var viewModelLocator       = viewModelLocatorFinder.FindLocator(request);

            if (viewModelLocator == null)
            {
                throw new MvxException("Sorry - somehow there's no viewmodel locator registered for {0}",
                                       request.ViewModelType);
            }

            IMvxViewModel model = null;

            if (!viewModelLocator.TryLoad(request.ViewModelType, request.ParameterValues, out model))
            {
                throw new MvxException(
                          "Failed to load ViewModel for type {0} from locator {1}",
                          request.ViewModelType, viewModelLocator.GetType().Name);
            }

            if (model != null)
            {
                model.RequestedBy = request.RequestedBy;
            }

            return(model);
        }
        public bool RequestNavigate(MvxShowViewModelRequest request)
        {
            var requestTranslator = this.GetService <IMvxWindowsPhoneViewModelRequestTranslator>();
            var xamlUri           = requestTranslator.GetXamlUriFor(request);

            return(InvokeOrBeginInvoke(() => _rootFrame.Navigate(xamlUri)));
        }
예제 #5
0
 public AboutView(MvxShowViewModelRequest request) : base(request)
 {
     if (AppDelegate.IsPad)
     {
         this.View.Frame = new RectangleF(0, 0, 768, 1024);
     }
 }
예제 #6
0
 public static IMvxTouchView CreateViewControllerFor <TTargetViewModel>(
     this IMvxTouchView view,
     MvxShowViewModelRequest <TTargetViewModel> request)
     where TTargetViewModel : class, IMvxViewModel
 {
     return(MvxServiceProviderExtensions.GetService <IMvxTouchViewCreator>().CreateView(request));
 }
        public void Show(MvxShowViewModelRequest request)
        {
            var requestTranslator = this.GetService <IMvxAndroidViewModelRequestTranslator>();
            var intent            = requestTranslator.GetIntentFor(request);

            Activity.StartActivity(intent);
        }
예제 #8
0
 public CompositeView(MvxShowViewModelRequest request)
     : base(request)
 {
     if (_viewDidLoadCallNeeded)
     {
         ViewDidLoad();
     }
 }
예제 #9
0
        protected Intent CreateIntentFor <TTargetViewModel>(IDictionary <string, string> parameterValues = null)
            where TTargetViewModel : class, IMvxViewModel
        {
            parameterValues = parameterValues ?? new Dictionary <string, string>();
            var request = new MvxShowViewModelRequest <TTargetViewModel>(parameterValues, false, MvxRequestedBy.UserAction);

            return(CreateIntentFor(request));
        }
예제 #10
0
 public SpheroView(MvxShowViewModelRequest request)
     : base(request)
 {
     if (_viewDidLoadCallNeeded)
     {
         ViewDidLoad();
     }
 }
예제 #11
0
 public bool RequestNavigate(MvxShowViewModelRequest request)
 {
     Action action = () =>
                         {
                             MvxTrace.TaggedTrace("MacNavigation", "Navigate requested");
                             _presenter.Show(request);
                         };
     return RequestMainThreadAction(action);
 }
예제 #12
0
 public TabBarController(MvxShowViewModelRequest request)
     : base(request)
 {
     this.GetService <ITabBarPresenterHost>().TabBarPresenter = this;
     if (_needViewDidLoadCall)
     {
         ViewDidLoad();
     }
 }
예제 #13
0
            public IMvxViewModelLocator Find(MvxShowViewModelRequest request)
            {
                IMvxViewModelLocator toReturn;

                if (!TryGetValue(request.ViewModelType, out toReturn))
                {
                    return(null);
                }
                return(toReturn);
            }
예제 #14
0
        public static IMvxTouchView CreateViewControllerFor <TTargetViewModel>(
            this IMvxTouchView view,
            IDictionary <string, string> parameterValues = null)
            where TTargetViewModel : class, IMvxViewModel
        {
            parameterValues = parameterValues ?? new Dictionary <string, string>();
            var request = new MvxShowViewModelRequest <TTargetViewModel>(parameterValues, false,
                                                                         MvxRequestedBy.UserAction);

            return(view.CreateViewControllerFor <TTargetViewModel>(request));
        }
예제 #15
0
        public virtual Tuple <Intent, int> GetIntentWithKeyFor(IMvxViewModel viewModel)
        {
            var request = MvxShowViewModelRequest.GetDefaultRequest(viewModel.GetType());
            var intent  = GetIntentFor(request);

            var key = this.GetService <IMvxAndroidSubViewModelCache>().Cache(viewModel);

            intent.PutExtra(SubViewModelKey, key);

            return(new Tuple <Intent, int>(intent, key));
        }
        public override void Show(MvxShowViewModelRequest request)
        {
            var view = CreateView(request);

            if (request.ClearTop)
            {
                ClearBackStack();
            }

            Show(view);
        }
예제 #17
0
        private static IMvxViewModel LoadViewModel(this IMvxWinRTView winRTView, MvxShowViewModelRequest viewModelRequest)
        {
            if (viewModelRequest.ClearTop)
            {
#warning TODO!
                //phoneView.ClearBackStack();
            }

            var loaderService = winRTView.GetService <IMvxViewModelLoader>();
            var viewModel     = loaderService.LoadViewModel(viewModelRequest);

            return((IMvxViewModel)viewModel);
        }
예제 #18
0
 public void Show(MvxShowViewModelRequest request)
 {
     try
     {
         var requestTranslator = this.GetService <IMvxViewsContainer>();
         var viewType          = requestTranslator.GetViewType(request.ViewModelType);
         _rootFrame.Navigate(viewType, request);
     }
     catch (Exception exception)
     {
         MvxTrace.Trace("Error seen during navigation request to {0} - error {1}", request.ViewModelType.Name, exception.ToLongString());
     }
 }
        public virtual Uri GetXamlUriFor(MvxShowViewModelRequest request)
        {
            var viewType = GetViewType(request.ViewModelType);

            if (viewType == null)
            {
                throw new MvxException("View Type not found for " + request.ViewModelType);
            }

            var requestText = JsonConvert.SerializeObject(request);
            var viewUrl     = string.Format("{0}?{1}={2}", GetBaseXamlUrlForView(viewType), QueryParameterKeyName, Uri.EscapeDataString(requestText));

            return(new Uri(viewUrl, UriKind.Relative));
        }
        private static IMvxViewModel LoadViewModel(this IMvxMacView macView,
                                                   MvxShowViewModelRequest viewModelRequest)
        {
            if (viewModelRequest.ClearTop)
            {
#warning TODO - BackStack not cleared for Mac
                //phoneView.ClearBackStack();
            }

            var loaderService = Mvx.Resolve <IMvxViewModelLoader>();
            var viewModel     = loaderService.LoadViewModel(viewModelRequest);

            return(viewModel);
        }
예제 #21
0
        public IMvxViewModelLocator FindLocator(MvxShowViewModelRequest request)
        {
            var candidate = _lookup.Find(request);

            if (candidate != null)
            {
                return(candidate);
            }

            if (UseDefaultViewModelLocator)
            {
                return(CreateDefaultViewModelLocator());
            }

            throw new MvxException("No ViewModelLocator registered for " + request.ViewModelType);
        }
예제 #22
0
 public override void Navigate(MvxShowViewModelRequest request)
 {
     lock (this)
     {
         var viewType = GetViewType(request.ViewModelType);
         if (viewType == null)
         {
             throw new MvxException("View Type not found for " + request.ViewModelType);
         }
         var view            = (IMvxConsoleView)Activator.CreateInstance(viewType);
         var viewModelLoader = this.GetService <IMvxViewModelLoader>();
         var viewModel       = viewModelLoader.LoadViewModel(request);
         view.HackSetViewModel(viewModel);
         this.GetService <IMvxConsoleCurrentView>().CurrentView = view;
         _navigationStack.Push(request);
     }
 }
예제 #23
0
        public virtual IMvxTouchView CreateView(MvxShowViewModelRequest request)
        {
            var viewType = GetViewType(request.ViewModelType);

            if (viewType == null)
            {
                throw new MvxException("View Type not found for " + request.ViewModelType);
            }

            var view = Activator.CreateInstance(viewType, request) as IMvxTouchView;

            if (view == null)
            {
                throw new MvxException("View not loaded for " + viewType);
            }
            return(view);
        }
예제 #24
0
        public override void Show(MvxShowViewModelRequest request)
        {
            try
            {
                var view = GetView(request);

                var viewController = view as NSViewController;
                if (viewController == null)
                {
                    throw new MvxException("Passed in IMvxTouchView is not a NSViewController");
                }

                PlaceView(request, viewController);
            }
            catch (Exception exception)
            {
                MvxTrace.Trace("Error seen during navigation request to {0} - error {1}", request.ViewModelType.Name,
                               exception.ToLongString());
            }
        }
예제 #25
0
        public virtual IMvxTouchView CreateView(IMvxViewModel viewModel)
        {
            var viewModelType     = viewModel.GetType();
            var request           = MvxShowViewModelRequest.GetDefaultRequest(viewModelType);
            var view              = CreateView(request);
            var viewModelProperty = view.GetType().GetProperty("ViewModel");

            if (viewModelProperty == null)
            {
                throw new MvxException("ViewModel Property missing for " + view.GetType());
            }

            if (!viewModelProperty.CanWrite)
            {
                throw new MvxException("ViewModel Property readonly for " + view.GetType());
            }

            viewModelProperty.SetValue(view, viewModel, null);
            return(view);
        }
        public bool RequestNavigate(MvxShowViewModelRequest request)
        {
            var requestTranslator = this.GetService <IMvxWindowsPhoneViewModelRequestTranslator>();
            var xamlUri           = requestTranslator.GetXamlUriFor(request);

            return(RequestMainThreadAction(() =>
            {
                try
                {
                    _rootFrame.Navigate(xamlUri);
                }
                catch (ThreadAbortException)
                {
                    throw;
                }
                catch (Exception exception)
                {
                    MvxTrace.Trace("Error seen during navigation request to {0} - error {1}", request.ViewModelType.Name, exception.ToLongString());
                }
            }));
        }
예제 #27
0
        public virtual Intent GetIntentFor(MvxShowViewModelRequest request)
        {
            var viewType = GetViewType(request.ViewModelType);

            if (viewType == null)
            {
                throw new MvxException("View Type not found for " + request.ViewModelType);
            }

            var requestText = JsonConvert.SerializeObject(request);

            var intent = new Intent(_applicationContext, viewType);

            intent.PutExtra(ExtrasKey, requestText);
#warning ClearTop is not enough :/ Need to work on an Intent based scheme like http://stackoverflow.com/questions/3007998/on-logout-clear-activity-history-stack-preventing-back-button-from-opening-l
            if (request.ClearTop)
            {
                intent.AddFlags(ActivityFlags.ClearTop);
            }
            intent.AddFlags(ActivityFlags.NewTask);
            return(intent);
        }
 private IMvxTouchView CreateView(MvxShowViewModelRequest request)
 {
     return(this.GetService <IMvxTouchViewCreator>().CreateView(request));
 }
예제 #29
0
 public LargeFixedView(MvxShowViewModelRequest request)
     : base(request)
 {
     Title = "Large Fixed";
 }
 public BaseDynamicKittenTableView(MvxShowViewModelRequest request)
     : base(request)
 {
 }