private void SelectLevel(Guid levelUid) { Level prev = _project.Levels.Contains(levelUid) ? _project.Levels[levelUid] : null; LevelPresenter prevLevel = _currentLevelRef; if (_currentLevel == levelUid) { return; } // Unbind previously selected layer if necessary if (_currentLevelRef != null) { _currentLevelRef.Deactivate(); _commandManager.RemoveCommandSubscriber(_currentLevelRef); } _currentLevel = Guid.Empty; _currentLevelRef = null; // Bind new layer if (levelUid != null && _levelContentController.ContentIsValid(levelUid)) { _currentLevel = levelUid; _currentLevelRef = CurrentLevel; _commandManager.AddCommandSubscriber(_currentLevelRef); if (!_project.Levels.Contains(levelUid)) { throw new InvalidOperationException("Selected a LevelPresenter with no corresponding model Level! Selected name: " + levelUid); } ContentInfoArbitrationPresenter info = _presentation.ContentInfo as ContentInfoArbitrationPresenter; info.BindInfoPresenter(CurrentLevel.InfoPresenter); CurrentLevel.InfoPresenter.RefreshContentInfo(); CurrentLevel.Activate(); } else { ContentInfoArbitrationPresenter info = _presentation.ContentInfo as ContentInfoArbitrationPresenter; info.BindInfoPresenter(null); } InvalidateLevelCommands(); CommandManager.Invalidate(CommandKey.ViewGrid); OnSyncCurrentLevel(new SyncLevelEventArgs(prev, prevLevel)); OnSyncContentView(EventArgs.Empty); }