/// <summary>
        /// Call to add specific validator to a model property
        /// </summary>
        protected PropertyValidationRule <TBindingModel> AddValidationFor <T>(Expression <Func <T> > propertyExpression, ValidationAttribute validator = null)
        {
            string propertyName = PropertySupport.ExtractPropertyName(propertyExpression);
            PropertyValidationRule <TBindingModel> result = AddValidationFor <T>(propertyName, validator);

            return(result);
        }
        protected PropertyValidationRule <TBindingModel> AddValidationFor <T>(string propertyName, ValidationAttribute validator = null)
        {
            PropertyValidationRule <TBindingModel> validation = new PropertyValidationRule <TBindingModel>(propertyName, validator);

            _validations.Add(validation);

            return(validation);
        }
        private void PerformValidation(PropertyValidationRule <TBindingModel> validation)
        {
            TBindingModel presentationModel = (TBindingModel)this;

            if (validation.IsInvalid(presentationModel))
            {
                AddErrorMessageForProperty(validation.PropertyName, validation.GetErrorMessage(presentationModel));
            }
        }