protected override void OnValidating(IValidationContext validationContext)
{
base.OnValidating(validationContext);
lock (_modelLock)
{
foreach (KeyValuePair<string, object> model in _modelObjects)
{
if (model.Value == null)
{
continue;
}
var modelValueAsModelBaseBase = model.Value as IModelValidation;
if (modelValueAsModelBaseBase != null)
{
modelValueAsModelBaseBase.Validate();
}
}
}
lock (ChildViewModels)
{
var previousValue = _childViewModelsHaveErrors;
_childViewModelsHaveErrors = false;
var childViewModels = ChildViewModels.ToArray();
foreach (var childViewModel in childViewModels)
{
childViewModel.ValidateViewModel();
if (((INotifyDataErrorInfo)childViewModel).HasErrors)
{
_childViewModelsHaveErrors = true;
RaisePropertyChanged(() => HasErrors);
}
}
if (!_childViewModelsHaveErrors && (_childViewModelsHaveErrors != previousValue))
{
RaisePropertyChanged(() => HasErrors);
}
}
}