private async void RootFrame_Navigated(object sender, NavigationEventArgs e) { RootView newView = e.Content as RootView; DebugHelper.Assert(newView != null, "The RootFrame should only navigate to a RootView"); // Build up the RootView's ViewModel and event handlers this.trackedRoot = new TrackedPage(newView, e.Parameter, this.container); await this.trackedRoot.InitialActivation; newView.Container = this.container; }
/// <summary> /// Having list of pages, fill them with correct IsTracked values from the storage. /// </summary> public void LoadIsTrackedIndicators(IEnumerable <Page> pages, Tracker tracker) { if (pages == null || tracker?.ID == null) { throw new ArgumentNullException("Cannot ensure-dont-tracks of undefined pages and/or tracker."); } foreach (Page page in pages) { if (page.ID == null) { throw new ArgumentNullException("Cannot ensure-dont-track of unregistered page."); } TrackedPage asssociatedTrackedPage = TrackedPages.Single(tp => tp.PageID == page.ID && tp.TrackerID == tracker.ID); page.IsTracked = asssociatedTrackedPage.IsTracked; } }
/// <summary> /// Remove page for tracker forever, losing all tracking history. /// </summary> public void RemovePageFromTracker(Page page, Tracker tracker) { if (page?.ID == null || tracker?.ID == null) { throw new ArgumentNullException("Cannot remove from tracking the undefined or unregistered page and/or tracker."); } TrackedPage subject = TrackedPages.Single(tp => tp.PageID == page.ID && tp.TrackerID == tracker.ID); TrackedPages.Remove((int)subject.ID); var thisPageTrackedTimes = TrackedPages.Count(tp => tp.PageID == page.ID); if (thisPageTrackedTimes < 1) { RemovePageCascade((int)page.ID); } }