private bool ValidateAsync(ValidationParameter validationParameter)
        {
            var propertyMetadata = validationParameter.PropertyMetadata;
            var propertyValue    = validationParameter.PropertyValue;

            var validationAttributes = propertyMetadata.GetCustomAttributes(true).OfType <ValidationAttribute>().ToList();

            if (validationAttributes.Any())
            {
                // uses the validator to check wether the property is valid or not
                var validationResults = new List <ValidationResult>();
                var validationContext = new ValidationContext(this, null, null);
                Validator.TryValidateValue(propertyValue, validationContext, validationResults, validationAttributes);

                if (validationResults.Any())
                {
                    // adds all detected errors for this property
                    var errorCollection = Errors.GetOrAdd(propertyMetadata.Name, new ErrorCollection());
                    errorCollection.Clear();
                    errorCollection.AddErrors(validationResults.Select(v => v.ErrorMessage));
                    Errors.GetOrAdd(propertyMetadata.Name, new ErrorCollection(validationResults.Select(v => v.ErrorMessage)));
                }
                else
                {
                    // reset errors for this property
                    ErrorCollection errorCollection;
                    Errors.TryRemove(propertyMetadata.Name, out errorCollection);
                }
                return(true);
            }
            return(false);
        }
 protected override void OnValidate(ValidationParameter validationParameter)
 {
     Task.Factory.StartNew(() => ValidateAsync(validationParameter))
     .ContinueWith(t =>
     {
         if (t.Result)
         {
             OnRaiseErrorsChangedEvent(validationParameter.PropertyMetadata.Name);
         }
     },
                   TaskScheduler.FromCurrentSynchronizationContext());
 }
Пример #3
0
 public void Validate(ValidationParameter validationParameter)
 {
     OnValidate(validationParameter);
 }
Пример #4
0
 protected abstract void OnValidate(ValidationParameter validationParameter);