protected override void OnValidatingBusinessRules(IValidationContext validationContext)
{
base.OnValidatingBusinessRules(validationContext);
lock (_modelLock)
{
foreach (var modelObject in _modelObjects)
{
// IDataErrorInfo
var dataErrorInfo = modelObject.Value as IDataErrorInfo;
if ((dataErrorInfo != null) && !string.IsNullOrEmpty(dataErrorInfo.Error))
{
validationContext.AddBusinessRuleValidationResult(BusinessRuleValidationResult.CreateError(dataErrorInfo.Error));
}
// IDataWarningInfo
var dataWarningInfo = modelObject.Value as IDataWarningInfo;
if ((dataWarningInfo != null) && !string.IsNullOrEmpty(dataWarningInfo.Warning))
{
validationContext.AddBusinessRuleValidationResult(BusinessRuleValidationResult.CreateWarning(dataWarningInfo.Warning));
}
// INotifyDataErrorInfo & INotifyDataWarningInfo
if (_modelErrorInfo.ContainsKey(modelObject.Key))
{
var modelErrorInfo = _modelErrorInfo[modelObject.Key];
foreach (var error in modelErrorInfo.GetErrors(string.Empty))
{
validationContext.AddBusinessRuleValidationResult(BusinessRuleValidationResult.CreateError(error));
}
foreach (var warning in modelErrorInfo.GetWarnings(string.Empty))
{
validationContext.AddBusinessRuleValidationResult(BusinessRuleValidationResult.CreateWarning(warning));
}
}
}
}
}