private void UpdateGeneticSettings(int index)
        {
            IGeneticSettings settings = null;

            _visitor = new AlgorithmOptionVisitorParam(null,
                                                       (x) => settings = x);
            _visitor.Visit(AlgorithmElements[index]);

            if (settings != null)
            {
                IGeneticSettings newSettings = ConvertToViewModelSettings(
                    _model.UpdateAlgorithm(index, ConvertToModelSettings(settings)));

                if (settings != newSettings)
                {
                    settings.SelectionRate              = newSettings.SelectionRate;
                    settings.AbsoluteSelection          = newSettings.AbsoluteSelection;
                    settings.MutationChance             = newSettings.MutationChance;
                    settings.StablePairWeight           = newSettings.StablePairWeight;
                    settings.GroupHappinessWeight       = newSettings.GroupHappinessWeight;
                    settings.EgalitarianHappinessWeight = newSettings.EgalitarianHappinessWeight;
                    settings.Size        = newSettings.Size;
                    settings.Generations = newSettings.Generations;
                }
                OnPropertyChanged("AlgorithmOptions");
            }
        }
        private void OnDeleteAlgorithmCommand(int index)
        {
            _model.DeleteAlgorithm(index);
            AlgorithmOptions.RemoveAt(index);
            AlgorithmElements.RemoveAt(index);

            _visitor = new AlgorithmOptionVisitorParam((x) => x.Index--,
                                                       (x) => x.Index--);
            for (int i = index; i < AlgorithmOptions.Count(); i++)
            {
                _visitor.Visit(AlgorithmElements[i]);
            }
            OnPropertyChanged("AlgorithmOptions");
        }
        public void EditGeneticAlgorithm()
        {
            int changedCount = 0;

            NewViewModel();
            _viewModel.NewGeneticAlgorithmCommand.Execute(null);

            _viewModel.AlgorithmOptions[0].Changed += (s, e) => changedCount++;

            AlgorithmOptionVisitorParam visitor = new AlgorithmOptionVisitorParam(
                (x) => Assert.Fail(),
                (x) =>
            {
                x.AbsoluteSelection = 0;
                x.SelectionRate     = 0;
                x.MutationChance    = 0;
            });

            visitor.Visit(_viewModel.AlgorithmElements[0]);

            _viewModel.AlgorithmOptions[0].Name = "test";
            Assert.AreEqual(4, changedCount);
        }