/// <summary>
        /// Creates a new viewmodel for a given combination of parent and child <seealso cref="ISolutionItem"/>s.
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        private DocumentViewModelBase CreateDocumentPageViewModel(ISolutionItem parent,
                                                                  ISolutionItem child,
                                                                  IProcessItems processItems)
        {
            if (child is ProjectViewModel)
            {
                return(new EditProjectDocumentViewModel(processItems, RequestedAction));
            }

            if (child is SolutionRootViewModel)
            {
                return(new EditSolutionDocumentViewModel(processItems));
            }

            // Is a target file under a project currently selected?
            var project = parent as ProjectViewModel;
            var fileref = child as FileReferenceViewModel;

            if (project != null && fileref != null)
            {
                var vm = new EditTranslationsDocumentViewModel(processItems);

                var optionsEngine = GetService <ISettingsManager>().Options;
                var group         = optionsEngine.GetOptionGroup("Options");

                vm.InitializeSettings(group);

                return(vm);
            }

            throw new System.NotImplementedException(string.Format("No default view available for {0} with child: {1}",
                                                                   (parent == null ? "(null)" : parent.GetType().ToString()),
                                                                   (child == null ? "(null)" : child.GetType().ToString())));
        }
        private void LoadEditPage(EditTranslationsDocumentViewModel pageViewmodel,
                                  string sourceFilePath, string targetPath)
        {
            pageViewmodel.LoadEditPage(sourceFilePath, targetPath);

            // Attach this dirty flag only where navigation away from this item
            // would cause data lose via document edit -> Solution dirty flag is handled somewhere else
            IsCurrentDocumentDirty = (CurrentEditPage != null ? CurrentEditPage.IsDirty : false);
            pageViewmodel.DirtyFlagChangedEvent += CurrentEditPage_DirtyFlagChangedEvent;
        }