Я пишу приложение WPF и хочу использовать аннотации данных для указания таких вещей, как Required
Поля, Range
и т. Д.
Мои классы ViewModel используют обычный интерфейс INotifyPropertyChanged
, и я могупроверить весь объект достаточно легко, используя C # 4 Validator
, но я бы также хотел, чтобы поля выделялись красным, если они не проверяются должным образом.Я нашел этот пост здесь (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2010/10/28/wpf-data-validation-using-net-data-annotations-part-ii.aspx)), в котором говорится о том, как написать модель базового представления для реализации IDataErrorInfo
и просто использовать Validator, но на самом деле реализация не компилируется, и я не вижу, как она будет работать. Методвопрос в следующем:
/// <summary>
/// Validates current instance properties using Data Annotations.
/// </summary>
/// <param name="propertyName">This instance property to validate.</param>
/// <returns>Relevant error string on validation failure or <see cref="System.String.Empty"/> on validation success.</returns>
protected virtual string OnValidate(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
{
throw new ArgumentException("Invalid property name", propertyName);
}
string error = string.Empty;
var value = GetValue(propertyName);
var results = new List<ValidationResult>(1);
var result = Validator.TryValidateProperty(
value,
new ValidationContext(this, null, null)
{
MemberName = propertyName
},
results);
if (!result)
{
var validationResult = results.First();
error = validationResult.ErrorMessage;
}
return error;
}
Проблема в том, что GetValue
не предоставлена. Он может говорить о GetValue
, который возникает, когда вы наследуете DependencyObject
, но синтаксис все еще не работает(он ожидает, что вы передадите DependencyProperty
в качестве параметра), но я использую обычные свойства CLR с OnPropertyChanged("MyProperty")
, вызываемым на установщике.
Есть ли хороший способ подключить проверку к IDataErrorInfo
интерфейс?