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()); }
public void Validate(ValidationParameter validationParameter) { OnValidate(validationParameter); }
protected abstract void OnValidate(ValidationParameter validationParameter);