/// <summary> /// Handle navigated event, ensuring the new view /// is properly initialized with a viewmodel. /// </summary> public void Navigated(object sender, NavigationEventArgs e) { // indicate navigation var oldVm = _currentViewModel as IViewModel; if (oldVm != null) { oldVm.NavigatedAway(); } _currentViewModel = null; if (e.Content == null) { return; } _currentView = (Control)e.Content; object newViewModel = null; if (e.NavigationMode == NavigationMode.Back) { // use existing viewmodel for view newViewModel = _currentView.DataContext; } else { // get query parameter var uri = e.Uri.OriginalString; string queryString = null; var param = uri.IndexOf("?"); if (param > 0) { queryString = uri.Substring(param + 1); } // create and/or initialize viewmodel var vmf = new ViewModelFactory(); newViewModel = vmf.CreateViewModel(_currentView, queryString); } // update current view _currentViewModel = newViewModel as IShowStatus; // indicate navigation var newVm = _currentViewModel as IViewModel; if (newVm != null) { if (e.NavigationMode == NavigationMode.Back) { newVm.NavigatingBackTo(); } else { newVm.NavigatingTo(); } } // set view datacontext if necessary if (!ReferenceEquals(_currentView.DataContext, _currentViewModel)) { _currentView.DataContext = _currentViewModel; } }
/// <summary> /// Handle navigated event, ensuring the new view /// is properly initialized with a viewmodel. /// </summary> public void Navigated(object sender, NavigationEventArgs e) { // indicate navigation var oldVm = _currentViewModel as IViewModel; if (oldVm != null) oldVm.NavigatedAway(); _currentViewModel = null; if (e.Content == null) return; _currentView = (Control)e.Content; object newViewModel = null; if (e.NavigationMode == NavigationMode.Back) { // use existing viewmodel for view newViewModel = _currentView.DataContext; } else { // get query parameter var uri = e.Uri.OriginalString; string queryString = null; var param = uri.IndexOf("?"); if (param > 0) queryString = uri.Substring(param + 1); // create and/or initialize viewmodel var vmf = new ViewModelFactory(); newViewModel = vmf.CreateViewModel(_currentView, queryString); } // update current view _currentViewModel = newViewModel as IShowStatus; // indicate navigation var newVm = _currentViewModel as IViewModel; if (newVm != null) if (e.NavigationMode == NavigationMode.Back) newVm.NavigatingBackTo(); else newVm.NavigatingTo(); // set view datacontext if necessary if (!ReferenceEquals(_currentView.DataContext, _currentViewModel)) _currentView.DataContext = _currentViewModel; }