我的模型类Animal
实现INotifyDataErrorInfo
以添加验证。我的视图绑定到一个视图模型,其属性SelectedAnimal
类型为Animal
,如下所示:
查看
<TextBox Text="{Binding SelectedAnimal.Epc, UpdateSourceTrigger=PropertyChanged,
ValidatesOnNotifyDataErrors=True}" />
视图模型
public Animal SelectedAnimal
{
get
{
return _animal;
}
set
{
Set(() => Animal, ref _animal, value);
}
}
错误可视化正常工作:
我想在我的viewmodel 中完成的字段EPC中添加额外的验证,而不是Animal
类。所以我想添加另一个验证规则(例如,检查EPC是否是唯一的),使用EPC TextBox可视化。
我怎样才能做到这一点?该视图模型规则的验证错误也应显示在EPC TextBox上。
我尝试操作类Animal的验证错误列表但没有成功。
其他信息
答案 0 :(得分:1)
这是解决问题的一种方法:
在viewmodel中包含要扩展其验证的属性
public string Epc
{
get
{
return _epc;
}
set
{
Animal.Epc = value;
Set(() => Epc, ref _epc, value, false);
}
}
向该属性添加两个自定义验证规则
[CustomValidation(typeof(ViewModel), "AnimalEpcValidate")]
[CustomValidation(typeof(ViewModel), "ExtendedEpcValidate")]
将您的扩展验证码(不是由Animal本身完成)添加到ExtendedEpcValidate
调用Animal.Epc
验证并将结果添加到viewmodel中的Epc
验证结果
public static ValidationResult AnimalEpcValidate(object obj, ValidationContext context)
{
var aevm = context.ObjectInstance as ViewModel;
// get errors from Animal validation
var animalErrors = aevm.Animal.GetErrors("Epc")?.Cast<string>();
// add errors from Animal validation to your Epc validation results
var error = animalErrors?.Aggregate(string.Empty, (current, animalError) => current + animalError);
// return aggregated errors of Epc property
return string.IsNullOrEmpty(error)
? ValidationResult.Success
: new ValidationResult(error, new List<string> { "Epc" });
}