private void SetContent(Uri newSource, NavigationType navigationType, object newContent, bool contentIsError) { var oldContent = Content as IContent; // assign content 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); } } }
private void OnFragmentNavigation(IContent content, FragmentNavigationEventArgs e) { // invoke optional IContent.OnFragmentNavigation content?.OnFragmentNavigation(e); // raise the FragmentNavigation event FragmentNavigation?.Invoke(this, e); }
private void OnSourceChanged(Uri oldValue, Uri newValue) { // if resetting source or old source equals new, don't do anything if (_isResetSource || newValue != null && newValue.Equals(oldValue)) { return; } // handle fragment navigation string newFragment; 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(Content as IContent, args); } else { var navType = _isNavigatingHistory ? NavigationType.Back : NavigationType.New; // only invoke CanNavigate for new navigation if (!_isNavigatingHistory && !CanNavigate(oldValue, newValue, navType)) { return; } Navigate(oldValue, newValue, navType); } }