private void OnSourceChanged(Uri oldValue, Uri newValue) { // if resetting source or old source equals new, don't do anything if (this.isResetSource || newValue != null && newValue.Equals(oldValue)) { return; } // handle fragment navigation string newFragment = null; var oldValueNoFragment = NavigationHelper.RemoveFragment(oldValue); var newValueNoFragment = NavigationHelper.RemoveFragment(newValue, out newFragment); if (newValueNoFragment != null && newValueNoFragment.Equals(oldValueNoFragment)) { // fragment navigation var args = new FragmentNavigationEventArgs { Fragment = newFragment }; OnFragmentNavigation(this.Content as IContent, args); } else { var navType = this.isNavigatingHistory ? NavigationType.Back : NavigationType.New; // only invoke CanNavigate for new navigation if (!this.isNavigatingHistory && !CanNavigate(oldValue, newValue, navType)) { return; } Navigate(oldValue, newValue, navType); } }
private void OnFragmentNavigation(IContent content, FragmentNavigationEventArgs e) { // invoke optional IContent.OnFragmentNavigation if (content != null) { content.OnFragmentNavigation(e); } // raise the FragmentNavigation event if (FragmentNavigation != null) { FragmentNavigation(this, e); } }
private void SetContent(Uri newSource, NavigationType navigationType, object newContent, bool contentIsError) { var oldContent = this.Content as IContent; // assign content this.Content = newContent; // do not raise navigated event when error if (!contentIsError) { var args = new NavigationEventArgs { Frame = this, Source = newSource, Content = newContent, NavigationType = navigationType }; OnNavigated(oldContent, newContent as IContent, args); } // set IsLoadingContent to false SetValue(IsLoadingContentPropertyKey, false); if (!contentIsError) { // and raise optional fragment navigation events string fragment; NavigationHelper.RemoveFragment(newSource, out fragment); if (fragment != null) { // fragment navigation var fragmentArgs = new FragmentNavigationEventArgs { Fragment = fragment }; OnFragmentNavigation(newContent as IContent, fragmentArgs); } } }