protected void OnPopToNewRoot(IPageViewModel viewModel, bool animated) { var pref = createPageFor(viewModel); PageReferences.Clear(); PageReferences.Add(pref); popToNewRootAsync(pref.View, animated); }
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); } } }