private void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) { MobileDebug.Service.WriteEventPair("Navigating1_0", "Page", e.SourcePageType, "Mode", e.NavigationMode, "Parameter", e.Parameter ?? "null", "TransInfo", e.NavigationTransitionInfo, "frames", history.Reverse().Select(f => f?.PageTypeName)); HistoricFrameHandler handler; HistoricParameter parameter; switch (e.NavigationMode) { case NavigationMode.New: case NavigationMode.Forward: SaveDataContext(); handler = HistoricFrameHandler.GetHandler(e.SourcePageType); parameter = handler.ToHistoricParameter(e.Parameter); history.Push(new HistoricFrame(e.SourcePageType, parameter)); break; case NavigationMode.Refresh: handler = HistoricFrameHandler.GetHandler(e.SourcePageType); parameter = handler.ToHistoricParameter(e.Parameter); history.Pop(); history.Push(new HistoricFrame(e.SourcePageType, parameter)); break; case NavigationMode.Back: history.Pop(); break; } MobileDebug.Service.WriteEvent("Navigating2", history.Reverse().Select(f => f?.PageTypeName)); }
public bool Restore() { MobileDebug.Service.WriteEvent("Restore1", restoreHistory.Select(f => f.PageTypeName)); //return false; if (restoreHistory.Count == 0) { return(false); } HistoricFrame frame = restoreHistory.Dequeue(); HistoricFrameHandler handler = HistoricFrameHandler.GetHandler(frame.Page); parameter = handler.FromHistoricParameter(frame.Parameter, library); try { MobileDebug.Service.WriteEventPair("Restore2", "Page", frame.PageTypeName, "Parameter", parameter?.Value); //rootFrame.Navigate(typeof(MobileDebug.DebugPage), null); return(rootFrame.Navigate(frame.Page, parameter.Value)); } catch (Exception e) { MobileDebug.Service.WriteEvent("RestoreFail", e, frame.PageTypeName, parameter.Value); restoreHistory.Clear(); return(false); } }
private void SaveDataContext() { if (history.Count == 0) { return; } HistoricFrame frame = history.Last(); if (frame.Parameter.UseDataContext) { HistoricFrameHandler handler = HistoricFrameHandler.GetHandler(frame.Page); frame.Parameter.DataContext = handler.ToHistoricDataContext(GetCurrentPage().DataContext); } }