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);
                }
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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);
            }
        }