我正在编写一个 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
和简单地使用验证器,但实现实际上并没有编译,我也看不到它是如何工作的。有问题的方法是这样的:
/// <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")
在 setter 上调用。
有没有很好的方法将验证连接到IDataErrorInfo
接口?