protected void RemoveReferenceFromStack(ViewLinkHelper reference) { if (reference != null) { PageReferences.Remove(reference); ViewModel.EnforcePageDisappearsNotification(reference.Model, true); } }
protected void PageDisappears(ViewLinkHelper viewLinkHelper) { var removingFromStack = ViewModel.Pages.LastOrDefault() == viewLinkHelper.Model; if (removingFromStack) { PageReferences.Remove(viewLinkHelper); } ViewModel.EnforcePageDisappearsNotification(viewLinkHelper.Model, removingFromStack); }
async void updatePages() { if (_pages != null && _pages.Count > 0) { foreach (var pref in PageReferences.Where(p => !_pages.Contains(p.Model)).ToList()) { PageReferences.Remove(pref); } if (new[] { this.Navigation.NavigationStack.FirstOrDefault(), this.Navigation.NavigationStack.LastOrDefault(), PageReferences.LastOrDefault()?.View } .All(v => v == PageReferences.FirstOrDefault()?.View)) { OnPopToRoot(Pages.LastOrDefault(), TransitionAnimationEnabled); } else { if (Navigation.NavigationStack.Count > 0) { var pref = createPageFor(Pages.LastOrDefault()); PageReferences.Clear(); PageReferences.Add(pref); await popToNewRootAsync(pref.View, TransitionAnimationEnabled); } else { OnPushViewModel(Pages.LastOrDefault(), TransitionAnimationEnabled); } } } else { //At least on page should be displayed PageReferences.Clear(); var blankPage = new ContentPage { BackgroundColor = Color.Transparent }; if (Navigation.NavigationStack.Count > 0) { await popToNewRootAsync(blankPage, TransitionAnimationEnabled); } else { await PushAsync(blankPage, TransitionAnimationEnabled); } } }