public MainWindowViewModel(IProjectDocumentFactory projectFactory, IDialogService dialogService, IDataAccessService dataService)
        {
            _projectFactory = projectFactory;
            _dialogService  = dialogService;
            _dataService    = dataService;

            ProjectViewModel = new ProjectViewModel();

            ViewModelMediator.Current.GetEvent <ProjectOpenedEventArgs>().Subscribe(this.ProjectOpened);
            ViewModelMediator.Current.GetEvent <TestLocationSelectedEventArgs>().Subscribe(this.TestLocationSelected);

            AppData = StoredAppData.Load();

            var attr = this.GetType().Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute)).Single() as AssemblyProductAttribute;

            ApplicationName = attr.Product;
            WindowTitle     = attr.Product;

            OpenProjectCommand           = new RelayCommand(OpenProjectDialog, null);
            OpenRecentCommand            = new RelayCommand(OpenRecentProject, null);
            SaveProjectCommand           = new RelayCommand(x => SaveProject(), o => _openProject != null);
            CloseProjectCommand          = new RelayCommand(CloseProject, o => _openProject != null);
            TestCommand                  = new RelayCommand(TestProject, o => _openProject != null);
            TestStageCommand             = new RelayCommand(TestStage, o => _openProject != null);
            TestLocationCommand          = new RelayCommand(TestLocation, o => _openProject != null);
            UndoCommand                  = new RelayCommand(Undo, p => ProjectViewModel.CurrentStage != null);
            RedoCommand                  = new RelayCommand(Redo, p => ProjectViewModel.CurrentStage != null);
            EnginePathCommand            = new RelayCommand(ChangeEnginePath);
            NewEntityCommand             = new RelayCommand(NewEntity);
            UpdateLayerVisibilityCommand = new RelayCommand(UpdateLayerVisibility);

            ShowBackstage = true;
        }
        public MainWindowViewModel(IProjectDocumentFactory projectFactory)
        {
            _projectFactory = projectFactory;

            ProjectViewModel = new ProjectViewModel();

            ViewModelMediator.Current.GetEvent <ProjectOpenedEventArgs>().Subscribe(this.ProjectOpened);

            AppData = StoredAppData.Load();

            var attr = this.GetType().Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute)).Single() as AssemblyProductAttribute;

            ApplicationName = attr.Product;
            WindowTitle     = attr.Product;

            TestCommand         = new RelayCommand(TestProject, o => _openProject != null);
            TestStageCommand    = new RelayCommand(TestStage, o => _openProject != null);
            TestLocationCommand = new RelayCommand(TestLocation, o => _openProject != null);
            UndoCommand         = new RelayCommand(Undo, p => ProjectViewModel.CurrentStage != null);
            RedoCommand         = new RelayCommand(Redo, p => ProjectViewModel.CurrentStage != null);
        }