/// <summary> /// Called when the object is validating. /// </summary> /// <param name="validationContext">The validation context.</param> protected override void OnValidating(IValidationContext validationContext) { base.OnValidating(validationContext); lock (_modelLock) { foreach (KeyValuePair <string, object> model in _modelObjects) { if (model.Value is null) { continue; } if (!_modelObjectsInfo[model.Key].SupportValidation) { continue; } var validatable = model.Value as IValidatable; if (validatable != null) { validatable.Validate(); } } } lock (ChildViewModels) { var previousValue = _childViewModelsHaveErrors; _childViewModelsHaveErrors = false; var childViewModels = ChildViewModels.ToArray(); foreach (var childViewModel in childViewModels) { childViewModel.Validate(); if (childViewModel.HasErrors) { _childViewModelsHaveErrors = true; RaisePropertyChanged(() => HasErrors); } } if (!_childViewModelsHaveErrors && _childViewModelsHaveErrors != previousValue) { RaisePropertyChanged(() => HasErrors); } } }
/// <summary> /// Called when the object is validating. /// </summary> protected override void OnValidating() { base.OnValidating(); lock (_modelObjects) { foreach (KeyValuePair <string, object> model in _modelObjects) { if (model.Value == null) { continue; } var modelValueAsModelBaseBase = model.Value as ModelBase; if (modelValueAsModelBaseBase != null) { modelValueAsModelBaseBase.Validate(); } } } lock (ChildViewModels) { var previousValue = _childViewModelsHaveErrors; _childViewModelsHaveErrors = false; var childViewModels = ChildViewModels.ToArray(); foreach (IViewModel childViewModel in childViewModels) { childViewModel.ValidateViewModel(); if (childViewModel.HasErrors) { _childViewModelsHaveErrors = true; RaisePropertyChanged(() => HasErrors); } } if (!_childViewModelsHaveErrors && (_childViewModelsHaveErrors != previousValue)) { RaisePropertyChanged(() => HasErrors); } } }