/// <summary> /// Invoked when this page is about to be displayed in a Frame. /// This method calls <see cref="LoadState"/>, where all page specific /// navigation and process lifetime management logic should be placed. /// </summary> /// <param name="e">Event data that describes how this page was reached. The Parameter /// property provides the group to be displayed.</param> public void OnNavigatedTo(NavigationEventArgs e) { var frameState = SuspensionHelper.SessionStateForFrame(this.Frame); this._pageKey = "Page-" + this.Frame.BackStackDepth; if (e.NavigationMode == NavigationMode.New) { // Clear existing state for forward navigation when adding a new page to the // navigation stack var nextPageKey = this._pageKey; int nextPageIndex = this.Frame.BackStackDepth; while (frameState.Remove(nextPageKey)) { nextPageIndex++; nextPageKey = "Page-" + nextPageIndex; } // Pass the navigation parameter to the new page if (this.LoadState != null) { this.LoadState(this, new LoadStateEventArgs(e.Parameter, null)); } } else { // Pass the navigation parameter and preserved page state to the page, using // the same strategy for loading suspended state and recreating pages discarded // from cache if (this.LoadState != null) { this.LoadState(this, new LoadStateEventArgs(e.Parameter, (Dictionary <String, Object>)frameState[this._pageKey])); } } }
/// <summary> /// Invoked when this page will no longer be displayed in a Frame. /// This method calls <see cref="SaveState"/>, where all page specific /// navigation and process lifetime management logic should be placed. /// </summary> /// <param name="e">Event data that describes how this page was reached. The Parameter /// property provides the group to be displayed.</param> public void OnNavigatedFrom(NavigationEventArgs e) { var frameState = SuspensionHelper.SessionStateForFrame(this.Frame); var pageState = new Dictionary <String, Object>(); if (this.SaveState != null) { this.SaveState(this, new SaveStateEventArgs(pageState)); } frameState[_pageKey] = pageState; }