private bool TryExport(QualifiedModuleName qualifiedModuleName)
        {
            var component = _projectsRepository.Component(qualifiedModuleName);

            if (component is null)
            {
                return(false); // Edge-case, component already gone.
            }

            if (_vbe.Kind == VBEKind.Standalone && component.IsSaved)
            {
                return(true); // File already up-to-date
            }

            // "Do you want to export '{qualifiedModuleName.Name}' before removing?" (localized)
            var message = string.Format(CodeExplorerUI.ExportBeforeRemove_Prompt, qualifiedModuleName.Name);

            switch (_messageBox.Confirm(message, CodeExplorerUI.ExportBeforeRemove_Caption, ConfirmationOutcome.Yes))
            {
            case ConfirmationOutcome.No:
                // User elected to remove without export, return success.
                return(true);

            case ConfirmationOutcome.Yes:
                if (_exportCommand.PromptFileNameAndExport(qualifiedModuleName))
                {
                    // Export complete
                    return(true);
                }
                break;
            }

            return(false); // Save dialog cancelled or export failed (failures will have already been displayed and logged by this point)
        }
        protected override void OnExecute(object parameter)
        {
            var message = string.Format(CodeExplorerUI.ExportBeforeRemove_Prompt, ((CodeExplorerComponentViewModel)parameter).Name);
            var result  = _messageBox.Confirm(message, CodeExplorerUI.ExportBeforeRemove_Caption, ConfirmationOutcome.Yes);

            if (result == ConfirmationOutcome.Cancel)
            {
                return;
            }

            if (result == ConfirmationOutcome.Yes && !ExportFile((CodeExplorerComponentViewModel)parameter))
            {
                return;
            }

            // No file export or file successfully exported--now remove it

            // I know this will never be null because of the CanExecute
            var declaration         = ((CodeExplorerComponentViewModel)parameter).Declaration;
            var qualifiedModuleName = declaration.QualifiedName.QualifiedModuleName;
            var components          = _projectsProvider.ComponentsCollection(qualifiedModuleName.ProjectId);

            components?.Remove(_projectsProvider.Component(qualifiedModuleName));
        }