/// <summary>
        /// Adds the context ensitive views to nested dock view.
        /// </summary>
        /// <param name="viewModel">The view model.</param>
        /// <param name="nestedDockingManager">The nested docking manager.</param>
        public void AddContextSensitiveViewsToNestedDockView(IViewModel viewModel, NestedDockingManager nestedDockingManager)
        {
            // viewModel is the viewmodel related to the nestedDockingManager
            var viewModeltype = viewModel.GetType();

            // Open all, context sensitive vies related to the documentView
            if (_contextualViewModelCollection.ContainsKey(viewModeltype))
            {
                foreach (var type in (_contextualViewModelCollection[viewModeltype]).ContextDependentViewModels)
                {
                    IViewModel contextDependenViewModel;

                    if (_openContextSensitiveViews.All(v => v.GetType() != type))
                    {
                        try
                        {
                            var typeFactory = TypeFactory.Default;
                            contextDependenViewModel = (IViewModel)typeFactory.CreateInstanceWithParametersAndAutoCompletion(type, _contextualViewModelCollection[viewModeltype].Title);
                        }
                        catch (Exception ex)
                        {
                            Log.ErrorWithData(ex, "Error creating contextualViewModel.");
                            continue;
                        }

                        if (contextDependenViewModel != null)
                        {
                            DockingSettings dockingSettings = _contextualViewModelCollection[viewModeltype].DockingSettings;
                            _orchestraService.ShowDocumentInNestedDockView(contextDependenViewModel, nestedDockingManager, dockingSettings, null);

                            if (_openContextSensitiveViews.All(v => v.GetType() != contextDependenViewModel.GetType()))
                            {
                                _openContextSensitiveViews.Add(contextDependenViewModel);
                            }

                            Log.Debug("ShowDocumentInNestedDockView: {0}, docklocation: {1}", contextDependenViewModel, dockingSettings.DockLocation);
                        }
                    }
                    else
                    {
                        contextDependenViewModel = _openContextSensitiveViews.FirstOrDefault(v => v.GetType() == type);

                        if (contextDependenViewModel != null)
                        {
                            DockingSettings dockingSettings = _contextualViewModelCollection[viewModeltype].DockingSettings;
                            _orchestraService.ShowDocumentInNestedDockView(contextDependenViewModel, nestedDockingManager, dockingSettings, null);
                        }
                    }
                }
            }
        }
        private static LayoutAnchorable WrapViewInNestedDockManager(FrameworkElement view, object tag = null, bool canFloat = false)
        {
            var nestedDockingManager = new NestedDockingManager();

            nestedDockingManager.DataContext = view.DataContext;

            var layoutDocument = new BindableLayoutDocument(view, null, true);

            layoutDocument.Title       = string.Empty;
            layoutDocument.CanAutoHide = false;
            layoutDocument.CanClose    = false;
            layoutDocument.CanHide     = false;
            layoutDocument.CanFloat    = false;

            nestedDockingManager.AddContentDocument(layoutDocument);

            var layoutAnchorable = new LayoutAnchorable {
                Title = ((IViewModel)view.DataContext).Title, Content = nestedDockingManager
            };

            return(layoutAnchorable);
        }
        /// <summary>
        /// Shows the document in nested dock view.
        /// </summary>
        /// <param name="viewModel">The view model.</param>
        /// <param name="dockingManager">The docking manager.</param>
        /// <param name="dockingSettings">The docking settings.</param>
        /// <param name="tag">The tag.</param>
        public void ShowDocumentInNestedDockView(IViewModel viewModel, NestedDockingManager dockingManager, DockingSettings dockingSettings, object tag = null)
        {
            var document = CreateDocument(viewModel, tag);

            dockingManager.AddDockedWindow(document, dockingSettings);
        }