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);
        }
예제 #2
0
        public virtual INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
                                                         IViewModelPresenter parentPresenter)
        {
            if (!MultiViewModel.ViewModelType.IsInstanceOfType(viewModel))
            {
                return(null);
            }
            bool data;

            if (context.TryGetData(NavigationConstants.SuppressTabNavigation, out data) && data)
            {
                return(null);
            }
            if (!CanShowViewModel(viewModel, context, parentPresenter))
            {
                return(null);
            }
            if (MultiViewModel.ItemsSource.Any(vm => vm == viewModel))
            {
                MultiViewModel.SelectedItem = viewModel;
            }
            else
            {
                MultiViewModel.AddViewModel(viewModel, true);
            }
            var operation = new NavigationOperation();

            CallbackManager.Register(OperationType.TabNavigation, viewModel, operation.ToOperationCallback(), context);
            return(operation);
        }
        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);
        }
예제 #4
0
        public virtual INavigationOperation TryShowAsync(IViewModel viewModel, IDataContext context,
                                                         IViewModelPresenter parentPresenter)
        {
            Should.NotBeNull(viewModel, "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);
            }
            MultiViewModel.AddViewModel(viewModel, true);
            var operation = new NavigationOperation();

            CallbackManager.Register(OperationType.TabNavigation, viewModel, operation.ToOperationCallback(), context);
            return(operation);
        }
 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;
 }
 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;
 }
 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;
 }
        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;
        }