public MultipleWordAlignmentViewModel(IProjectService projectService, IBusyService busyService, IExportService exportService, IAnalysisService analysisService)
            : base("Multiple Word Alignment")
        {
            _projectService  = projectService;
            _busyService     = busyService;
            _exportService   = exportService;
            _analysisService = analysisService;

            _projectService.ProjectOpened += _projectService_ProjectOpened;

            var showCognateSets = new TaskAreaBooleanViewModel("Show cognate sets")
            {
                Value = true
            };

            showCognateSets.PropertyChanged += _showCognateSets_PropertyChanged;
            TaskAreas.Add(new TaskAreaItemsViewModel("Common tasks",
                                                     new TaskAreaItemsViewModel("Sort words by",
                                                                                new TaskAreaCommandGroupViewModel(
                                                                                    new TaskAreaCommandViewModel("Form", new RelayCommand(() => SortBy("StrRep", ListSortDirection.Ascending))),
                                                                                    new TaskAreaCommandViewModel("Variety", new RelayCommand(() => SortBy("Variety", ListSortDirection.Ascending)))),
                                                                                showCognateSets)));
            TaskAreas.Add(new TaskAreaItemsViewModel("Other tasks",
                                                     new TaskAreaCommandViewModel("Export all cognate sets", new RelayCommand(ExportCognateSets, CanExportCognateSets))));

            _words         = new BindableList <MultipleWordAlignmentWordViewModel>();
            _selectedWords = new BindableList <MultipleWordAlignmentWordViewModel>();

            _showInVarietyPairsCommand = new RelayCommand(ShowInVarietyPairs, CanShowInVarietyPairs);
            _performComparisonCommand  = new RelayCommand(PerformComparison);

            _groupByCognateSet = true;
            _sortByProp        = "StrRep";

            Messenger.Default.Register <ComparisonPerformedMessage>(this, msg => AlignWords());
            Messenger.Default.Register <DomainModelChangedMessage>(this, msg =>
            {
                if (msg.AffectsComparison)
                {
                    ResetAlignment();
                }
            });
            Messenger.Default.Register <PerformingComparisonMessage>(this, msg => ResetAlignment());
            Messenger.Default.Register <SwitchViewMessage>(this, HandleSwitchView);
        }
        public MultipleWordAlignmentViewModel(IProjectService projectService, IBusyService busyService, IExportService exportService, IAnalysisService analysisService)
            : base("Multiple Word Alignment")
        {
            _projectService = projectService;
            _busyService = busyService;
            _exportService = exportService;
            _analysisService = analysisService;

            _projectService.ProjectOpened += _projectService_ProjectOpened;

            var showCognateSets = new TaskAreaBooleanViewModel("Show cognate sets") {Value = true};
            showCognateSets.PropertyChanged += _showCognateSets_PropertyChanged;
            TaskAreas.Add(new TaskAreaItemsViewModel("Common tasks",
                new TaskAreaItemsViewModel("Sort words by",
                    new TaskAreaCommandGroupViewModel(
                        new TaskAreaCommandViewModel("Form", new RelayCommand(() => SortBy("StrRep", ListSortDirection.Ascending))),
                        new TaskAreaCommandViewModel("Variety", new RelayCommand(() => SortBy("Variety", ListSortDirection.Ascending)))),
                    showCognateSets)));
            TaskAreas.Add(new TaskAreaItemsViewModel("Other tasks",
                new TaskAreaCommandViewModel("Export all cognate sets", new RelayCommand(ExportCognateSets, CanExportCognateSets))));

            _words = new BindableList<MultipleWordAlignmentWordViewModel>();
            _selectedWords = new BindableList<MultipleWordAlignmentWordViewModel>();

            _showInVarietyPairsCommand = new RelayCommand(ShowInVarietyPairs, CanShowInVarietyPairs);
            _performComparisonCommand = new RelayCommand(PerformComparison);

            _groupByCognateSet = true;
            _sortByProp = "StrRep";

            Messenger.Default.Register<ComparisonPerformedMessage>(this, msg => AlignWords());
            Messenger.Default.Register<DomainModelChangedMessage>(this, msg =>
            {
                if (msg.AffectsComparison)
                    ResetAlignment();
            });
            Messenger.Default.Register<PerformingComparisonMessage>(this, msg => ResetAlignment());
            Messenger.Default.Register<SwitchViewMessage>(this, HandleSwitchView);
        }