private static Dictionary<string, string> CheckFieldWarningsOrErrors(object value, string propertyChanged, ValidationType validationType)
{
var warningsOrErrors = new Dictionary<string, string>();
var model = value as IModel;
if (model != null)
{
// Respect IsHidingValidationResults
if (model.IsHidingValidationResults)
{
return warningsOrErrors;
}
// Read all data from validation context
var validationContext = model.ValidationContext;
var fieldValidationResults = new List<IFieldValidationResult>();
switch (validationType)
{
case ValidationType.Warning:
fieldValidationResults = validationContext.GetFieldWarnings();
break;
case ValidationType.Error:
fieldValidationResults = validationContext.GetFieldErrors();
break;
}
foreach (var fieldValidationResult in fieldValidationResults)
{
warningsOrErrors[fieldValidationResult.PropertyName] = fieldValidationResult.Message;
}
return warningsOrErrors;
}
var iDataWarningInfo = value as IDataWarningInfo;
if ((validationType == ValidationType.Warning) && (iDataWarningInfo == null))
{
return warningsOrErrors;
}
var iDataErrorInfo = value as IDataErrorInfo;
if ((validationType == ValidationType.Error) && (iDataErrorInfo == null))
{
return warningsOrErrors;
}
var propertiesToCheck = new List<string>();
if (!string.IsNullOrEmpty(propertyChanged))
{
propertiesToCheck.Add(propertyChanged);
}
else
{
var type = value.GetType();
var properties = type.GetPropertiesEx();
foreach (var property in properties)
{
propertiesToCheck.Add(property.Name);
}
}
foreach (string property in propertiesToCheck)
{
string warningOrError = string.Empty;
switch (validationType)
{
case ValidationType.Warning:
// ReSharper disable PossibleNullReferenceException
warningOrError = iDataWarningInfo[property];
// ReSharper restore PossibleNullReferenceException
break;
case ValidationType.Error:
// ReSharper disable PossibleNullReferenceException
warningOrError = iDataErrorInfo[property];
// ReSharper restore PossibleNullReferenceException
break;
}
if (!string.IsNullOrEmpty(warningOrError))
{
warningsOrErrors[property] = warningOrError;
}
}
return warningsOrErrors;
}