private void ChangeParameterType([NotNull] ActionParameterViewModelBase parameter, [NotNull] ParameterDescription newParameterDescription)
        {
            Assert.ArgumentNotNull(parameter, "parameter");
            Assert.ArgumentNotNull(newParameterDescription, "newParameterDescription");

            var originalIndex = Parameters.IndexOf(parameter);

            RemoveParameter(parameter);

            AddParameter(newParameterDescription, originalIndex);
        }
        private void RemoveParameter([NotNull] ActionParameterViewModelBase parameter)
        {
            Assert.ArgumentNotNull(parameter, "parameter");

            parameter.ParameterTypeChanged -= ChangeParameterType;
            _originalParameters.Remove(parameter.Parameter);
            _parameters.Remove(parameter);

            MoveParameterDownCommand.UpdateCanExecute();
            MoveParameterUpCommand.UpdateCanExecute();

            OnPropertyChanged("ParametersCollectionEmpty");
            OnPropertyChanged("ActionParametersDescription");
        }
        private void AddParameter([NotNull] ActionParameterViewModelBase parameterToAdd)
        {
            Assert.ArgumentNotNull(parameterToAdd, "parameterToAdd");

            parameterToAdd.ParameterTypeChanged += ChangeParameterType;
            parameterToAdd.PropertyChanged      += HandleParameterDescriptionChanged;
            _parameters.Add(parameterToAdd);
            _originalParameters.Add(parameterToAdd.Parameter);
            MoveParameterDownCommand.UpdateCanExecute();
            MoveParameterUpCommand.UpdateCanExecute();

            OnPropertyChanged("ParametersCollectionEmpty");
            OnPropertyChanged("ActionParametersDescription");
        }