Не могу понять как получить сообщения для поля.
Понравилась реализация из Demo\WinForms\Forms\BizEntityForm.cs
Но там при ошибке поля горят красным, а если нет ошибки, то желтым.
Это говорит об ошибке, но не передает ее смысл. Валидация там реализована следующим образом
protected bool Validate(Control control, bool validateCombines)
{
bool result = true;
foreach (Binding binding in control.DataBindings)
{
if (binding.BindingManagerBase == null || binding.BindingManagerBase.Count == 0)
continue;
BizEntity item = binding.BindingManagerBase.Current as BizEntity;
if (item != null)
{
string key = GetBindingKey(item, binding, control);
if (!_keyToControl.ContainsKey(key))
continue;
ControlInfo ci = _keyToControl[key];
string fieldName = binding.BindingMemberInfo.BindingField;
bool isValid = ci.IsValidatable?
ci.PropertyDescriptor != null?
Validator.IsValid(item, ci.PropertyDescriptor):
item.IsValid(fieldName):
true;
if (isValid)
{
if (item.IsDirtyMember(fieldName))
SetDirty(control);
else
ResetControl(control);
}
else
{
// тут хочется вогнать сообщение об ошибке для поля в ErrorProvider
// но его невозможно получить. Можно получить все возможные сообщения ошибок для поля.
SetInvalid(control);
result = false;
}
....
}
}
return result;
}
Я обычно решаю этот вопрос патчем файла Validator.cs
Я просто при проверке в public static bool IsValid(ValidationContext context, string fieldName)
формирую словарь куда и записываю пару поле-сообщение, а потом достаю и вывожу на форме.
Но каждый раз патчить — дело несерьезное.
Подскажите правильный вариант. Может я где-то чего-то недоглядел?