private void OnNavigation(NavigationEventArgs args) { lock (_LockObject) { EndPoint contentEndPoint; foreach (var oldView in args.OldViews) { if (_ContentEndPoints.TryGetValue(oldView, out contentEndPoint)) { contentEndPoint.MetaContext = null; _ContentEndPoints.Remove(oldView); } } if (args.NewView == null) { _ContentEndPoints.Add(args.NewView, args.Destination); } } }
private void PrepareRegionForChange(string regionName, EndPoint endPoint, object content) { var activeViewModels = GetActiveViewModels(regionName); FrameworkElement dataContextHolder = null; var args = new NavigationEventArgs(activeViewModels.ToList(), endPoint, content); Navigating(this, args); Logger.Instance.Log("Removing " + regionName + " Region content not for " + GetLog(endPoint)); foreach (var view in _RegionManager.Regions[regionName].Views.ToList()) { if (view != content) { if (_DisposableViewStates.ContainsKey(view)) { _DisposableViewStates[view].Dispose(); _DisposableViewStates.Remove(view); } dataContextHolder = view as FrameworkElement; if (dataContextHolder != null) { dataContextHolder.DataContext = null; } _RegionManager.Regions[regionName].Remove(view); } } activeViewModels.Clear(); }
private void Navigating(IMenuBarManager barManager, IViewNavigator navigator, NavigationEventArgs e) { Stack<Action> cleanup; foreach (var owner in _CleanupsByOwner .Where(kvp => kvp.Key != EndPoint.Root && kvp.Key != e.Destination) .Select(kvp => kvp.Key) .ToList()) { cleanup = _CleanupsByOwner[owner]; while (cleanup.Count != 0) { cleanup.Pop()(); } _CleanupsByOwner.Remove(owner); } }