private void ProcessSnapshots( Breadcrumb breadcrumb ) { if( _navigationSnapshots.Count > 0 ) { var snapshots = _navigationSnapshots.Where( snapshot => snapshot.Breadcrumb.Equals( breadcrumb ) ).ToList(); foreach( var snapshot in snapshots ) { if( snapshot.Guard != null ) { snapshot.Guard( snapshot.Tag ); } _navigationSnapshots.Remove( snapshot ); } } }
private bool RestoreBreadcrumbs( bool clearOnSuccess = true ) { if( !ApplicationData.Current.RoamingSettings.Values.ContainsKey( "Breadcrumbs" ) ) { return false; } var unwind = new Stack<Breadcrumb>(); string state; try { var history = (string) ApplicationData.Current.RoamingSettings.Values["Breadcrumbs"]; using( var stream = new MemoryStream( Convert.FromBase64String( history ) ) ) { var reader = new BinaryReader( stream ); state = reader.ReadString(); var count = reader.ReadInt32(); while( count-- > 0 ) { var pageTypeName = reader.ReadString(); var hasParameters = reader.ReadBoolean(); var pageType = Type.GetType( pageTypeName ); XParameters parameters = null; if( hasParameters ) { parameters = XParametersSerializer.Deserialize( reader ); } var breadcrumb = new Breadcrumb( pageType, parameters ); unwind.Push( breadcrumb ); } } if( unwind.Count == 0 ) { return false; } } catch( IOException ) { return false; } foreach( var bc in unwind ) { _breadcrumbs.Push( bc ); } IsUnwinding = true; ((WindowsRTApplication) Application.Current).RootFrame.SetNavigationState( state ); IsUnwinding = false; if( clearOnSuccess ) { ApplicationData.Current.RoamingSettings.Values["Breadcrumbs"] = null; } return true; }
private void RootFrame_Navigated( object sender, NavigationEventArgs e ) { if( !_initialized ) { CompleteInitialization( e ); } if( e.NavigationMode == NavigationMode.Back ) { var breadcrumb = _breadcrumbs.Pop(); ProcessSnapshots( breadcrumb ); } else if( e.NavigationMode == NavigationMode.New ) { var breadcrumb = new Breadcrumb(e.SourcePageType, XParameters.Empty); _breadcrumbs.Push(breadcrumb); //_breadcrumbs.Push(new Breadcrumb(e.SourcePageType, e.Parameter as XParameters)); // _breadcrumbs.Push(new Breadcrumb(e.SourcePageType, XParameters.Empty)); } }