public void SwitchToWorkspace(IWorkspace targetWorkspace)
        {
            Logger.Debug("SwitchToWorkspace({0})", targetWorkspace);
            if (targetWorkspace != null)
            {
                var focusedMonitor   = _context.MonitorContainer.FocusedMonitor;
                var destMonitor      = _context.WorkspaceContainer.GetDesiredMonitorForWorkspace(targetWorkspace) ?? focusedMonitor;
                var currentWorkspace = _context.WorkspaceContainer.GetWorkspaceForMonitor(destMonitor);
                var sourceMonitor    = _context.WorkspaceContainer.GetCurrentMonitorForWorkspace(targetWorkspace);

                if (targetWorkspace != currentWorkspace)
                {
                    _lastWorkspace = currentWorkspace;
                    _context.WorkspaceContainer.AssignWorkspaceToMonitor(currentWorkspace, sourceMonitor);
                    _context.WorkspaceContainer.AssignWorkspaceToMonitor(targetWorkspace, destMonitor);

                    currentWorkspace.DoLayout();
                    targetWorkspace.DoLayout();

                    WorkspaceUpdated?.Invoke();

                    targetWorkspace.FocusLastFocusedWindow();
                }
            }
        }