Validation
The ViewModelBase
derives from ModelBase
, thus all information here also applies to the ViewModelBase
Validation is very important for data objects. Therefore, the ModelBase supports all kinds of different validation:
- Internal validation via the ValidateFields and ValidateBusinessRules methods
- Validation via data annotations (attributes)
- External validators using the IValidatorProvider and IValidator interfaces
The validation results are cached and only executed when a property changes (the object becomes dirty) or when the validation is forced.
Validation via validate methods
Validation via data annotations
Validation via special model validators
Validation via IValidator
Using the validation context
Getting a summary of validation results
Deferring validation
Different types of validation
There are two different types of validation in Catel, namely warnings and errors. There are also two flavors of validations, namely field validation and business rule validation.
Order of execution of events
The order of execution is very important if you want to perform very advanced validation (such as translating validations at the end of each validation sequence).
- IValidator.BeforeValidation
- OnValidation (raises Validating event) if not already validated
- IValidator.BeforeValidateFields
- OnValidatingFields (raises the ValidatingFields event)
- IValidator.ValidateFields
- ValidateFields
- OnValidatedFields (raises the ValidatedFields event)
- IValidator.AfterValidateFields
- IValidator.BeforeValidateBusinessRules
- OnValidatingBusinessRules (raises the ValidatingBusinessRules event)
- IValidator.ValidateBusinessRules
- ValidateBusinessRules
- OnValidatedBusinessRules (raises the ValidatedBusinessRules event)
- IValidator.AfterValidateBusinessRules end if not already validated
- OnValidated (raises the Validated event)
- IValidator.AfterValidation
There are lots of events, and it may seem complex and confusing at first sight. However, all these events give developers the opportunity to hook into the validation sequence at any time.
Contributions
We would like to thank the following contributors:
Want to contribute to the documentation? We have a guide for that!
Questions
Have a question about Catel? Use StackOverflow with the Catel tag!