gpt4 book ai didi

wpf - 结合 WPF 的 DataAnnotations 和 IDataErrorInfo

转载 作者:行者123 更新时间:2023-12-04 18:50:19 25 4
gpt4 key购买 nike

我正在编写一个 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 ) 讨论了如何编写基本 View 模型来实现 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 作为参数传递)但我正在使用带有 OnPropertyChanged("MyProperty") 的常规 CLR 属性。在 setter 上被调用。

是否有一种好方法将验证连接到 IDataErrorInfo界面?

最佳答案

使用您上面的代码作为起点,我通过 IDataErrorInfo 进行了这项工作。

当您只有属性名称时,您的问题集中在获取属性的值上,反射可以在这里提供帮助。

public string this[string property]
{
get
{
PropertyInfo propertyInfo = this.GetType().GetProperty(property);
var results = new List<ValidationResult>();

var result = Validator.TryValidateProperty(
propertyInfo.GetValue(this, null),
new ValidationContext(this, null, null)
{
MemberName = property
},
results);

if (!result)
{
var validationResult = results.First();
return validationResult.ErrorMessage;
}

return string.Empty;
}
}

关于wpf - 结合 WPF 的 DataAnnotations 和 IDataErrorInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7071595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com