コード例 #1
0
 public SelectedItemMainViewModel(IViewModelPresenter presenter, IOperationCallbackManager callbackManager, IToastPresenter toastPresenter) : base(toastPresenter)
 {
     Should.NotBeNull(presenter, "presenter");
     Should.NotBeNull(callbackManager, "callbackManager");
     _presenter = presenter;
     _callbackManager = callbackManager;
     _presenter.DynamicPresenters.Add(this);
 }
コード例 #2
0
        public MainViewModel(IViewModelPresenter viewModelPresenter)
        {
            Should.NotBeNull(viewModelPresenter, "viewModelPresenter");
            viewModelPresenter.DynamicPresenters.Add(new DynamicMultiViewModelPresenter(this));

            OpenProductsCommand = RelayCommandBase.FromAsyncHandler(OpenProducts);
            OpenOrdersCommand = RelayCommandBase.FromAsyncHandler(OpenOrders);
        }
コード例 #3
0
        private bool CanShowViewModel(IViewModel viewModel, IDataContext context,
            IViewModelPresenter parentPresenter)
        {
            bool data;
            if (context.TryGetData(NavigationConstants.SuppressPageNavigation, out data) && data)
                return false;

            if (_canShowViewModel == null)
                return CanShowViewModelDefault(viewModel, context, parentPresenter);
            return _canShowViewModel(viewModel, context, parentPresenter);
        }
コード例 #4
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="ApplicationStateManager" /> class.
 /// </summary>
 public ApplicationStateManager([NotNull] ISerializer serializer, [NotNull] IViewModelProvider viewModelProvider,
     [NotNull] IViewManager viewManager, [NotNull] IViewModelPresenter viewModelPresenter)
 {
     Should.NotBeNull(serializer, "serializer");
     Should.NotBeNull(viewModelProvider, "viewModelProvider");
     Should.NotBeNull(viewManager, "viewManager");
     Should.NotBeNull(viewModelPresenter, "viewModelPresenter");
     _serializer = serializer;
     _viewModelProvider = viewModelProvider;
     _viewManager = viewManager;
     _viewModelPresenter = viewModelPresenter;
 }
コード例 #5
0
        public MainViewModel(IViewModelPresenter viewModelPresenter, IToastPresenter toastPresenter)
        {
            Should.NotBeNull(viewModelPresenter, "viewModelPresenter");
            Should.NotBeNull(toastPresenter, "toastPresenter");
            _viewModelPresenter = viewModelPresenter;
            _toastPresenter = toastPresenter;
            ShowFirstWindowCommand = RelayCommandBase.FromAsyncHandler(ShowFirstWindow);
            ShowSecondWindowCommand = RelayCommandBase.FromAsyncHandler(ShowSecondWindow);
            ShowFirstTabCommand = RelayCommandBase.FromAsyncHandler(ShowFirstTab);
            ShowSecondTabCommand = RelayCommandBase.FromAsyncHandler(ShowSecondTab);
            ShowFirstPageCommand = RelayCommandBase.FromAsyncHandler(ShowFirstPage);
            ShowSecondPageCommand = RelayCommandBase.FromAsyncHandler(ShowSecondPage);
            ShowBackStackPageCommand = RelayCommandBase.FromAsyncHandler(ShowBackStackPage);

            //NOTE The DynamicMultiViewModelPresenter allows to use the current view model as presenter.
            _presenter = new DynamicMultiViewModelPresenter(this);
            viewModelPresenter.DynamicPresenters.Add(_presenter);
        }
コード例 #6
0
 public virtual Task <bool> TryCloseAsync(IDataContext context, IViewModelPresenter parentPresenter)
 {
     return(null);
 }
コード例 #7
0
 private static bool CanShowViewModelNavigationPresenter(IViewModel viewModel, IDataContext dataContext, IViewModelPresenter arg3)
 {
     var viewName = viewModel.GetViewName(dataContext);
     var container = viewModel.GetIocContainer(true);
     var mappingProvider = container.Get<IViewMappingProvider>();
     var mappingItem = mappingProvider.FindMappingForViewModel(viewModel.GetType(), viewName, false);
     return mappingItem != null && typeof(Page).IsAssignableFrom(mappingItem.ViewType);
 }
コード例 #8
0
 public virtual INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
     IViewModelPresenter parentPresenter)
 {
     Should.NotBeNull(viewModel, "viewModel");
     bool data;
     if (context.TryGetData(NavigationConstants.SuppressTabNavigation, out data) && data)
         return null;
     if (!CanShowViewModel(viewModel, context, parentPresenter))
         return null;
     MultiViewModel.AddViewModel(viewModel, true);
     var operation = new NavigationOperation();
     CallbackManager.Register(OperationType.TabNavigation, viewModel, operation.ToOperationCallback(), context);
     return operation;
 }
コード例 #9
0
 private static bool CanShowViewModelTabPresenter(IViewModel viewModel, IDataContext dataContext, IViewModelPresenter arg3)
 {
     var viewName = viewModel.GetViewName(dataContext);
     var container = viewModel.GetIocContainer(true);
     var mappingProvider = container.Get<IViewMappingProvider>();
     var mappingItem = mappingProvider.FindMappingForViewModel(viewModel.GetType(), viewName, false);
     return mappingItem == null || typeof(ITabView).IsAssignableFrom(mappingItem.ViewType) ||
            !typeof(UIViewController).IsAssignableFrom(mappingItem.ViewType);
 }
コード例 #10
0
        public INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
            IViewModelPresenter parentPresenter)
        {
            var viewMediator = TryCreateWindowViewMediator(viewModel, context);
            if (viewMediator == null)
                return null;
            var tcs = new TaskCompletionSource<object>();
            var operation = new NavigationOperation(tcs.Task);

            if (_currentTask == null)
                Show(viewMediator, operation, context, tcs);
            else
                _currentTask.TryExecuteSynchronously(_ => Show(viewMediator, operation, context, tcs));
            return operation;
        }
コード例 #11
0
 public bool Restore(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     var view = context.GetData(RestoredViewConstant);
     if (view == null)
         return false;
     var mediator = TryCreateWindowViewMediator(viewModel, context);
     if (mediator == null)
         return false;
     mediator.UpdateView(view, context.GetData(IsOpenViewConstant), context);
     return true;
 }
コード例 #12
0
        IAsyncOperation IDynamicViewModelPresenter.TryShowAsync(IDataContext context, IViewModelPresenter parentPresenter)
        {
            if (!_isStarted || _hasRootPage)
            {
                return(null);
            }

            if (WrapToNavigationController)
            {
                _hasRootPage = true;
                return(parentPresenter.ShowAsync(context));
            }

            var viewModel = context.GetData(NavigationConstants.ViewModel);

            if (viewModel == null)
            {
                return(null);
            }

            var mappingItem = IocContainer.Get <IViewMappingProvider>().FindMappingForViewModel(viewModel.GetType(), viewModel.GetViewName(context), false);

            if (mappingItem == null || !typeof(UIViewController).IsAssignableFrom(mappingItem.ViewType))
            {
                return(null);
            }

            _hasRootPage = true;
            viewModel.Settings.State.AddOrUpdate(IsRootConstant, null);
            var operation = new AsyncOperation <object>();

            IocContainer.Get <IOperationCallbackManager>().Register(OperationType.PageNavigation, viewModel, operation.ToOperationCallback(), context);
            ServiceProvider.ThreadManager.Invoke(ExecutionMode.AsynchronousOnUiThread, this, viewModel, context, (@this, vm, ctx) => @this.InitializeRootPage(vm, ctx));
            return(operation);
        }
コード例 #13
0
 INavigationOperation IDynamicViewModelPresenter.TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     parentPresenter.DynamicPresenters.Remove(this);
     _application.RootVisual = (UIElement)ViewManager.GetOrCreateView(viewModel, null, context);
     return new NavigationOperation();
 }
コード例 #14
0
 INavigationOperation IDynamicViewModelPresenter.TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     parentPresenter.DynamicPresenters.Remove(this);
     var operation = parentPresenter.ShowAsync(viewModel, context);
     if (ShutdownOnMainViewModelClose)
     {
         operation.ContinueWith(result =>
         {
             Application application = Application.Current;
             if (application != null)
             {
                 Action action = application.Shutdown;
                 application.Dispatcher.BeginInvoke(action);
             }
         });
     }
     if (_rootWindow != null)
     {
         var iocContainer = MvvmApplication.Current.IocContainer;
         IWindowViewMediator mediator = new WindowViewMediator(_rootWindow, viewModel, iocContainer.Get<IThreadManager>(),
             iocContainer.Get<IViewManager>(), iocContainer.Get<IWrapperManager>(),
             iocContainer.Get<IOperationCallbackManager>());
         mediator.UpdateView(new PlatformWrapperRegistrationModule.WindowViewWrapper(_rootWindow), true, context);
         _rootWindow.Show();
     }
     return operation;
 }
コード例 #15
0
        public INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
        {
            if (viewModel == this)
                return null;

            var operation = new NavigationOperation();
            var callback = operation.ToOperationCallback();
            //Saving callback to view model state that will allow us to execute it even after app save\restore cycle.
            _callbackManager.Register(NavigationType, viewModel, callback, context);
            OnShowViewModel(viewModel);
            return operation;
        }
コード例 #16
0
 public BackStackMainViewModel(IViewModelPresenter presenter, IOperationCallbackManager callbackManager, IToastPresenter toastPresenter)
     : base(presenter, callbackManager, toastPresenter)
 {
     _viewModels = new Stack<IViewModel>();
 }
コード例 #17
0
 INavigationOperation IDynamicViewModelPresenter.TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     parentPresenter.DynamicPresenters.Remove(this);
     var operation = parentPresenter.ShowAsync(viewModel, context);
     if (ShutdownOnMainViewModelClose)
         operation.ContinueWith(result => Application.Exit());
     if (AutoRunApplication)
         Application.Run();
     return operation;
 }
コード例 #18
0
 public virtual INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
     IViewModelPresenter parentPresenter)
 {
     Should.NotBeNull(viewModel, nameof(viewModel));
     if (ReferenceEquals(viewModel, _multiViewModel))
         return null;
     bool data;
     if (context.TryGetData(NavigationConstants.SuppressTabNavigation, out data) && data)
         return null;
     if (!CanShowViewModel(viewModel, context, parentPresenter))
         return null;
     if (MultiViewModel.ItemsSource.Contains(viewModel))
         MultiViewModel.SelectedItem = viewModel;
     else
         MultiViewModel.AddViewModel(viewModel, true);
     var operation = new NavigationOperation();
     CallbackManager.Register(OperationType.TabNavigation, viewModel, operation.ToOperationCallback(), context);
     return operation;
 }
コード例 #19
0
 public BackStackMainViewModel(IViewModelPresenter presenter, IOperationCallbackManager callbackManager, IToastPresenter toastPresenter)
     : base(presenter, callbackManager, toastPresenter)
 {
     _viewModels = new Stack <IViewModel>();
 }
コード例 #20
0
        private static bool CanShowViewModelNavigationPresenter(IViewModel viewModel, IDataContext dataContext, IViewModelPresenter arg3)
        {
            var viewName        = viewModel.GetViewName(dataContext);
            var container       = viewModel.GetIocContainer(true);
            var mappingProvider = container.Get <IViewMappingProvider>();
            var mappingItem     = mappingProvider.FindMappingForViewModel(viewModel.GetType(), viewName, false);

            return(mappingItem != null && typeof(UIViewController).IsAssignableFrom(mappingItem.ViewType));
        }
コード例 #21
0
 public bool Restore(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     if (!CanShowViewModel(viewModel, context, parentPresenter))
         return false;
     INavigationProvider provider;
     if (viewModel.GetIocContainer(true).TryGet(out provider))
     {
         provider.OnNavigated(viewModel, NavigationMode.Reset, context);
         return true;
     }
     return false;
 }
コード例 #22
0
        INavigationOperation IDynamicViewModelPresenter.TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
        {
            parentPresenter.DynamicPresenters.Remove(this);
            _mainViewModel = viewModel;

            var view = (Page)ViewManager.GetOrCreateView(_mainViewModel, true, context);
            NavigationPage page = view as NavigationPage;
            if (page == null && _wrapToNavigationPage)
                page = CreateNavigationPage(view);
            if (page != null)
            {
                var iocContainer = MvvmApplication.Current.IocContainer;
                INavigationService navigationService;
                if (!iocContainer.TryGet(out navigationService))
                {
                    navigationService = CreateNavigationService();
                    iocContainer.BindToConstant(navigationService);
                }
                //Activating navigation provider
                INavigationProvider provider;
                iocContainer.TryGet(out provider);

                navigationService.UpdateRootPage(page);
                view = page;
            }
            Application.Current.MainPage = view;
            return new NavigationOperation();
        }
コード例 #23
0
 public INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
     IViewModelPresenter parentPresenter)
 {
     if (!CanShowViewModel(viewModel, context, parentPresenter))
         return null;
     var tcs = new TaskCompletionSource<object>();
     var operation = new NavigationOperation(tcs.Task);
     context = context.ToNonReadOnly();
     context.AddOrUpdate(NavigationConstants.ViewModel, viewModel);
     var provider = viewModel.GetIocContainer(true).Get<INavigationProvider>();
     provider.CurrentNavigationTask.TryExecuteSynchronously(_ =>
     {
         try
         {
             var task = provider.NavigateAsync(operation.ToOperationCallback(), context);
             tcs.TrySetFromTask(task);
         }
         catch (Exception e)
         {
             tcs.TrySetException(e);
             throw;
         }
     });
     return operation;
 }
コード例 #24
0
 INavigationOperation IDynamicViewModelPresenter.TryShowAsync(IViewModel viewModel, IDataContext context, IViewModelPresenter parentPresenter)
 {
     parentPresenter.DynamicPresenters.Remove(this);
     if (WrapToNavigationController)
         return parentPresenter.ShowAsync(viewModel, context);
     _window.RootViewController = (UIViewController)ViewManager.GetOrCreateView(viewModel, null, context);
     return new NavigationOperation();
 }