public virtual bool Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
        {
            Should.NotBeNull(args, "args");
            if (!args.IsCancelable)
                return false;
            var eventArgs = ((NavigatingCancelEventArgs)args);
            if (eventArgs.NavigationMode != NavigationMode.Back && eventArgs.Mapping != null)
                return Navigate(eventArgs.Mapping, eventArgs.Parameter, dataContext);

            var activity = PlatformExtensions.CurrentActivity;
            if (activity == null)
                return false;
            GoBack();
            return activity.IsFinishing;
        }
 bool INavigationService.Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
 {
     if (NavigateArgs == null)
         return false;
     return NavigateArgs(args);
 }
 public virtual bool Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
 {
     Should.NotBeNull(args, nameof(args));
     if (!args.IsCancelable)
         return false;
     var eventArgs = (NavigatingCancelEventArgs)args;
     if (eventArgs.NavigationMode == NavigationMode.Back)
         return GoBackInternal();
     // ReSharper disable once AssignNullToNotNullAttribute
     return Navigate(eventArgs.Mapping, eventArgs.Parameter, dataContext);
 }
 private bool NavigateInternal(NavigatingCancelEventArgsBase args)
 {
     if (!args.IsCancelable)
         return false;
     NavigatingCancelEventArgs originalArgs = ((NavigatingCancelEventArgsWrapper)args).Args;
     if (originalArgs.NavigationMode == NavigationMode.Back)
     {
         _frame.GoBack();
         return true;
     }
     return _frame.Navigate(originalArgs.Uri);
 }
 public virtual void OnNavigating(NavigatingCancelEventArgsBase e)
 {
     EventHandler<INavigationService, NavigatingCancelEventArgsBase> handler = Navigating;
     if (handler != null) handler(this, e);
 }
 public virtual bool Navigate(NavigatingCancelEventArgsBase args, IDataContext context)
 {
     Should.NotBeNull(args, nameof(args));
     if (!args.IsCancelable)
         return false;
     var eventArgs = (NavigatingCancelEventArgs)args;
     //Back button pressed.
     if (eventArgs.IsBackButtonNavigation && XamarinFormsExtensions.SendBackButtonPressed != null)
     {
         var sendBackButton = XamarinFormsExtensions.SendBackButtonPressed(CurrentContent as Page);
         if (sendBackButton != null)
         {
             RaiseNavigated(null, null, NavigationMode.Back);
             sendBackButton();
             return true;
         }
     }
     if (eventArgs.NavigationMode == NavigationMode.Back)
     {
         GoBack();
         return true;
     }
     // ReSharper disable once AssignNullToNotNullAttribute
     return Navigate(eventArgs.Mapping, eventArgs.Parameter, context);
 }
 private bool NavigateInternal(NavigatingCancelEventArgsBase args)
 {
     if (!args.IsCancelable)
         return false;
     var wrapper = (NavigatingCancelEventArgsWrapper)args;
     if (wrapper.Args.NavigationMode == NavigationMode.Back)
     {
         _frame.GoBack();
         return true;
     }
     return Navigate(wrapper.Args.SourcePageType, wrapper.Parameter, null);
 }
 protected virtual INavigationContext CreateContextNavigateFrom(IViewModel viewModelFrom, NavigatingCancelEventArgsBase args)
 {
     string idOperation;
     GetViewModelTypeFromParameter(NavigationService.GetParameterFromArgs(args), out idOperation);
     return new NavigationContext(NavigationType.Page, args.NavigationMode, viewModelFrom,
         idOperation == _currentOperationId ? _navigationTargetVm : null, this)
     {
         {NavigatingCancelArgsConstant, args},
         {OperationIdConstant, idOperation}
     };
 }
 private void Renavigate(IViewModel currentViewModel, [NotNull] INavigationContext context, NavigatingCancelEventArgsBase args)
 {
     if (CurrentContent != null)
         TryCacheViewModel(context, CurrentContent, currentViewModel);
     if (_navigatingCancelArgs == null)
     {
         if (NavigationService.Navigate(args, _lastContext))
             ClearCacheIfNeed(_lastContext ?? DataContext.Empty, _navigationTargetVm);
         else
             CancelCurrentNavigation(context);
     }
     else
         _navigatingCancelArgs.Cancel = false;
 }
        public bool Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
        {
            Should.NotBeNull(args, "args");
            if (args is BackButtonNavigatingEventArgs)
            {
                var application = Application.Current;
                if (application == null)
                    return false;
                RaiseNavigated(BackButtonNavigationEventArgs.Instance);
                application.Exit();
                return true;
            }

            var result = NavigateInternal(args);
            if (result)
                ClearNavigationStackIfNeed(dataContext);
            return result;
        }
 /// <summary>
 ///     Subscriber to the Navigating event.
 /// </summary>
 protected virtual void NavigationServiceOnNavigating(object sender, NavigatingCancelEventArgsBase args)
 {
     try
     {
         _navigatingCancelArgs = args;
         OnNavigating(args);
     }
     finally
     {
         _navigatingCancelArgs = null;
     }
 }
Exemplo n.º 12
0
 /// <summary>
 ///     Navigates using cancel event args.
 /// </summary>
 public bool Navigate(NavigatingCancelEventArgsBase args, IDataContext context)
 {
     Should.NotBeNull(args, "args");
     if (!args.IsCancelable)
         return false;
     if (args.NavigationMode == NavigationMode.Back)
     {
         GoBack();
         return true;
     }
     var eventArgs = ((NavigatingCancelEventArgs)args);
     // ReSharper disable once AssignNullToNotNullAttribute
     return Navigate(eventArgs.Mapping, eventArgs.Parameter, context);
 }
        public bool Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
        {
            Should.NotBeNull(args, nameof(args));
#if WINDOWS_PHONE
            if (args is BackButtonNavigatingEventArgs)
            {
                var application = Application.Current;
                if (application == null)
                    return false;
                RaiseNavigated(BackButtonNavigationEventArgs.Instance);
                application.Terminate();
                return true;
            }
#endif
            bool result = NavigateInternal(args);
            if (result)
                ClearNavigationStackIfNeed(dataContext);
            return result;
        }
 /// <summary>
 ///     Navigates using cancel event args.
 /// </summary>
 public bool Navigate(NavigatingCancelEventArgsBase args, IDataContext context)
 {
     Should.NotBeNull(args, "args");
     if (!args.IsCancelable)
         return false;
     var eventArgs = ((NavigatingCancelEventArgs)args);
     if (eventArgs.IsBackButtonNavigation && SendBackButtonPressed != null)
         return SendBackButtonPressed(CurrentContent as Page);
     if (eventArgs.NavigationMode == NavigationMode.Back)
     {
         GoBack();
         return true;
     }
     // ReSharper disable once AssignNullToNotNullAttribute
     return Navigate(eventArgs.Mapping, eventArgs.Parameter, context);
 }
 /// <summary>
 ///     Navigates using cancel event args.
 /// </summary>
 public bool Navigate(NavigatingCancelEventArgsBase args, IDataContext dataContext)
 {
     Should.NotBeNull(args, "args");
     var result = NavigateInternal(args);
     if (result)
         ClearNavigationStackIfNeed(dataContext);
     return result;
 }
 private void OnNavigating(NavigatingCancelEventArgsBase args)
 {
     if (_ignoreNavigating)
         return;
     var currentViewModel = CurrentViewModel;
     if (currentViewModel == null)
         return;
     try
     {
         _closingViewModel = currentViewModel;
         args.Cancel = true;
         var context = CreateContextNavigateFrom(currentViewModel, args);
         var navigateTask = (_closedFromViewModel || !args.IsCancelable)
             ? Empty.TrueTask
             : OnNavigatingFrom(currentViewModel, context);
         var t = navigateTask.TryExecuteSynchronously(task =>
         {
             if (!task.IsCanceled && task.IsFaulted)
             {
                 _closingViewModel = null;
                 var callback = _currentCallback;
                 if (callback != null)
                 {
                     callback.Invoke(OperationResult.CreateErrorResult<bool?>(OperationType.PageNavigation,
                         currentViewModel, task.Exception, context));
                     _currentCallback = null;
                 }
                 return;
             }
             if (task.IsCanceled || !task.Result)
             {
                 _closingViewModel = null;
                 CancelCurrentNavigation(context);
                 return;
             }
             ThreadManager.InvokeOnUiThreadAsync(() =>
             {
                 try
                 {
                     _ignoreNavigating = true;
                     Renavigate(currentViewModel, context, args);
                 }
                 finally
                 {
                     _closingViewModel = null;
                     _ignoreNavigating = false;
                 }
             });
         });
         t.WithTaskExceptionHandler(this);
     }
     catch (Exception)
     {
         _closingViewModel = null;
         throw;
     }
 }
 private bool NavigateInternal(NavigatingCancelEventArgsBase args)
 {
     if (!args.IsCancelable)
         return false;
     NavigatingCancelEventArgs originalArgs = ((NavigatingCancelEventArgsWrapper)args).Args;
     if (originalArgs.NavigationMode == NavigationMode.Back)
     {
         _frame.GoBack();
         return true;
     }
     if (_useUrlNavigation)
     {
         if (originalArgs.ExtraData == null)
             return _frame.Navigate(originalArgs.Uri);
         return _frame.Navigate(originalArgs.Uri, originalArgs.ExtraData);
     }
     if (originalArgs.ExtraData == null)
         return _frame.Navigate(originalArgs.Content);
     return _frame.Navigate(originalArgs.Content, originalArgs.ExtraData);
 }
 protected virtual INavigationContext CreateContextNavigateFrom(IViewModel viewModelFrom, NavigatingCancelEventArgsBase args)
 {
     string idOperation;
     GetViewModelTypeFromParameter(NavigationService.GetParameterFromArgs(args), out idOperation);
     var viewModelTo = idOperation == _currentOperationId ? _navigationTargetVm : null;
     if (viewModelTo == null && viewModelFrom != null && args.NavigationMode == NavigationMode.Back)
         viewModelTo = viewModelFrom.GetParentViewModel();
     return new NavigationContext(NavigationType.Page, args.NavigationMode, viewModelFrom, viewModelTo, this)
     {
         {NavigationProviderConstants.NavigatingCancelArgs, args},
         {NavigationProviderConstants.OperationId, idOperation}
     };
 }