To keep validation running, IDataErrorInfo
must be implemented by the data context, which property is bound to the control. So, it should be something like:
public class PersonViewModel : IDataErrorInfo
{
[Required(AllowEmptyStrings = false)]
public string Name
{
get
{
return _person.Name
}
set
{
_person.Name = value;
}
}
public string Error
{
get { throw new NotImplementedException(); }
}
string IDataErrorInfo.this[string propertyName]
{
get
{
return OnValidate(propertyName);
}
}
protected virtual string OnValidate(string propertyName)
{
/* ... */
}
}
There's no need to implement IDataErrorInfo
in model, this is view model's responsibility. Usually, IDataErrorInfo
is implemented by the base class for your view models.
By the way, why OnValidate
is protected? How do you imagine overriding of this method?