From 46ac5783ae01cf7937e28be9eb462e1dbafef10e Mon Sep 17 00:00:00 2001 From: Andrej Spilak Date: Thu, 22 Sep 2016 15:38:05 +0200 Subject: [PATCH 1/2] Fixes issue 104 (https://github.com/rid00z/FreshMvvm/issues/104): RemoveFromNavigation and then popping PageModel causes ReverseInit being called on removed FreshBasePageModel, instead of the one being popped --- src/FreshMvvm/PageModelCoreMethods.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/FreshMvvm/PageModelCoreMethods.cs b/src/FreshMvvm/PageModelCoreMethods.cs index bd6405b..167ccb8 100644 --- a/src/FreshMvvm/PageModelCoreMethods.cs +++ b/src/FreshMvvm/PageModelCoreMethods.cs @@ -260,16 +260,23 @@ public void RemoveFromNavigation () /// public void RemoveFromNavigation (bool removeAll = false) where TPageModel : FreshBasePageModel { - //var pages = this._currentPage.Navigation.Where (o => o is TPageModel); - foreach (var page in this._currentPage.Navigation.NavigationStack.Reverse().ToList()) + FreshBasePageModel next = null; + foreach (var page in this._currentPage.Navigation.NavigationStack.Reverse().ToList()) { if (page.BindingContext is TPageModel) { page.GetModel()?.RaisePageWasPopped (); this._currentPage.Navigation.RemovePage (page); + + bool isPreviousPageModelMatch = typeof(TPageModel) == next?.PreviousPageModel?.GetType(); + if (isPreviousPageModelMatch) + { + next.PreviousPageModel = next.PreviousPageModel?.PreviousPageModel; + } if (!removeAll) break; } + next = next == null ? _currentPageModel : next.PreviousPageModel; } } } From ed1d03ff4d7fafb352b6a5c083c13758dfccd759 Mon Sep 17 00:00:00 2001 From: Andrej Spilak Date: Thu, 22 Sep 2016 16:48:46 +0200 Subject: [PATCH 2/2] Varialbe name more descriptive --- src/FreshMvvm/PageModelCoreMethods.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/FreshMvvm/PageModelCoreMethods.cs b/src/FreshMvvm/PageModelCoreMethods.cs index 167ccb8..06c17b1 100644 --- a/src/FreshMvvm/PageModelCoreMethods.cs +++ b/src/FreshMvvm/PageModelCoreMethods.cs @@ -260,7 +260,7 @@ public void RemoveFromNavigation () /// public void RemoveFromNavigation (bool removeAll = false) where TPageModel : FreshBasePageModel { - FreshBasePageModel next = null; + FreshBasePageModel nextPageModel = null; foreach (var page in this._currentPage.Navigation.NavigationStack.Reverse().ToList()) { if (page.BindingContext is TPageModel) @@ -268,15 +268,15 @@ public void RemoveFromNavigation (bool removeAll = false) where TPag page.GetModel()?.RaisePageWasPopped (); this._currentPage.Navigation.RemovePage (page); - bool isPreviousPageModelMatch = typeof(TPageModel) == next?.PreviousPageModel?.GetType(); + bool isPreviousPageModelMatch = typeof(TPageModel) == nextPageModel?.PreviousPageModel?.GetType(); if (isPreviousPageModelMatch) { - next.PreviousPageModel = next.PreviousPageModel?.PreviousPageModel; + nextPageModel.PreviousPageModel = nextPageModel.PreviousPageModel?.PreviousPageModel; } if (!removeAll) break; } - next = next == null ? _currentPageModel : next.PreviousPageModel; + nextPageModel = nextPageModel == null ? _currentPageModel : nextPageModel.PreviousPageModel; } } }