public Task<bool> HandleNavigation( NavigationContext context ) { //Contract.Requires<ArgumentNullException>( context != null ); return null; }
/// <summary> /// Navigates to the specified view with parameters. /// </summary> /// <param name="viewName">Name of the view.</param> /// <param name="parameters">The parameters.</param> /// <exception cref="System.ArgumentNullException">viewName</exception> /// <exception cref="System.ArgumentException">viewName</exception> public async void Navigate( string viewName, XParameters parameters, bool openInSubFrame = false) { var context = new NavigationContext { ViewName = viewName, Parameters = parameters }; foreach( var handler in _navigationHandlers ) { if( await handler.HandleNavigation( context ) ) { break; } } if( context.Cancel ) { return; } ViewDescriptor descriptor; if( !_views.TryGetValue( context.ViewName, out descriptor ) ) { throw new ArgumentException( String.Format( "View with name '{0}' is not registered.", context.ViewName ), "viewName" ); } if (openInSubFrame) { var subFrame = ((WindowsRTApplication) Application.Current).RootSubFrame; subFrame.Navigate(descriptor.Type, context.Parameters); ((UIElement)subFrame.Parent).Visibility = Visibility.Visible; //FlyoutBase.ShowAttachedFlyout(((WindowsRTApplication)Application.Current).RootFrame); } else { ((WindowsRTApplication)Application.Current).RootFrame.Navigate(descriptor.Type, context.Parameters); } //if (openInSubFrame) ((WindowsRTApplication)Application.Current).RootSubFrame.Navigate(descriptor.Type, context.Parameters); //else ((WindowsRTApplication)Application.Current).RootFrame.Navigate(descriptor.Type, context.Parameters); }
public Frame NavigateWithFrame(string viewName, XParameters parameters) { var context = new NavigationContext {ViewName = viewName, Parameters = parameters}; if (context.Cancel) { return null; } ViewDescriptor descriptor; if (!_views.TryGetValue(context.ViewName, out descriptor)) { throw new ArgumentException(String.Format("View with name '{0}' is not registered.", context.ViewName), "viewName"); } Frame subFrame = ((WindowsRTApplication) Application.Current).RootSubFrame; subFrame.Navigate(descriptor.Type, context.Parameters); ((UIElement) subFrame.Parent).Visibility = Visibility.Visible; return subFrame; }
private void CancelAuthenticationAndRollbackHistory() { if( _snapshotId != null ) { var snapshotId = _snapshotId; _snapshotId = null; _targetContext = null; _navigationService.RollbackSnapshot( snapshotId ); } }
private async Task StartAuthentication( string initialViewName, XParameters parameters, Action performWhenAuthenticated ) { if( _authenticationServiceContext != null ) { var authenticated = await _authenticationServiceContext.IsAuthenticated(); if( !authenticated ) { Action<object> guard = NavigationGuard; if( performWhenAuthenticated != null ) { guard = async o => { NavigationGuard( o ); if( await _authenticationServiceContext.IsAuthenticated() ) { performWhenAuthenticated(); } }; } _targetContext = null; _snapshotId = _navigationService.CreateSnapshot( guard ); if( string.IsNullOrEmpty( initialViewName ) ) { initialViewName = _authenticationServiceContext.AuthenticationViewName; parameters = _authenticationServiceContext.AuthenticationViewParameters; } _navigationService.Navigate( initialViewName, parameters ); } else { if( performWhenAuthenticated != null ) { performWhenAuthenticated(); } } } }
/// <summary> /// Completes the authentication. /// </summary> public void CompleteAuthentication() { if( _snapshotId != null ) { var snapshotId = _snapshotId; var targetContext = _targetContext; _snapshotId = null; _targetContext = null; if( targetContext != null ) { _navigationService.RollbackSnapshot( snapshotId, targetContext.ViewName, targetContext.Parameters ); } else { _navigationService.RollbackSnapshot( snapshotId ); } } }
public async Task<bool> HandleNavigation( NavigationContext context ) { ViewDescriptor descriptor; var result = false; if( _authenticationServiceContext == null || !_views.TryGetValue( context.ViewName, out descriptor ) ) { return false; } if( AuthenticationInProgress ) { if( !descriptor.PartOfAuthentication ) { context.Cancel = true; CancelAuthenticationAndRollbackHistory(); result = true; } } else { if( descriptor.RequiresAuthentication ) { var authenticated = await _authenticationServiceContext.IsAuthenticated(); if( !authenticated ) { _targetContext = new NavigationContext { ViewName = context.ViewName, Parameters = context.Parameters }; _snapshotId = _navigationService.CreateSnapshot( NavigationGuard ); context.ViewName = _authenticationServiceContext.AuthenticationViewName; context.Parameters = _authenticationServiceContext.AuthenticationViewParameters; result = true; } } } return result; }
private void NavigationGuard( object tag ) { _snapshotId = null; _targetContext = null; }