/// <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); }