protected override void Dispose(bool disposing) { if (disposing) { MessagingCenter.Unsubscribe <IVisualElementRenderer>(this, UpdateToolbarButtons); foreach (var childViewController in ViewControllers) { childViewController.Dispose(); } if (_tracker != null) { _tracker.Dispose(); } _secondaryToolbar.RemoveFromSuperview(); _secondaryToolbar.Dispose(); _secondaryToolbar = null; _parentMasterDetailPage = null; Current = null; // unhooks events var navPage = (NavigationPage)Element; navPage.PropertyChanged -= HandlePropertyChanged; var navController = ((INavigationPageController)navPage); navController.PushRequested -= OnPushRequested; navController.PopRequested -= OnPopRequested; navController.PopToRootRequested -= OnPopToRootRequested; navController.RemovePageRequested -= OnRemovedPageRequested; navController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested; } base.Dispose(disposing); if (_appeared) { ((Page)Element).SendDisappearing(); _appeared = false; } }