首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何扩展对视图模型的子项的验证?

如何扩展对视图模型的子项的验证?
EN

Stack Overflow用户
提问于 2016-09-23 11:43:43
回答 1查看 48关注 0票数 1

我的模型类Animal实现了INotifyDataErrorInfo来添加验证。我的视图绑定到一个具有属性SelectedAnimalAnimal类型的视图模型,如下所示:

视图

代码语言:javascript
运行
复制
<TextBox Text="{Binding SelectedAnimal.Epc, UpdateSourceTrigger=PropertyChanged, 
                   ValidatesOnNotifyDataErrors=True}" />

ViewModel

代码语言:javascript
运行
复制
public Animal SelectedAnimal
{
    get
    {
        return _animal;
    }
    set
    {
        Set(() => Animal, ref _animal, value);
    }
}

错误可视化工作得很好:

问题

我想添加额外的验证,在我的视图模型中完成的字段EPC,而不是在Animal类中。因此,我想添加另一个验证规则(例如,检查EPC是否唯一),即使用EPC TextBox可视化。

我怎样才能做到这一点?视图模型规则的验证错误也应该显示在EPC TextBox上。

我尝试过操纵类动物的验证错误列表,但没有成功。

更多信息

基于类ValidatableModel的验证

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 05:56:17

这是解决问题的一种方法:

  • 包装要在视图模型中扩展其验证的属性。 公共字符串Epc { get { _epc;} set { Animal.Epc = value;Set() => Epc,ref _epc,value,false);}
  • 向该属性添加两个自定义验证规则 CustomValidation(类型(ViewModel),"AnimalEpcValidate")
  • 将扩展的验证代码(不是由动物完成的)添加到ExtendedEpcValidate
  • 调用Animal.Epc验证并将结果添加到视图模型中的Epc验证结果 公共静态ValidationResult AnimalEpcValidate(object obj,ValidationContext上下文){ var aevm = context.ObjectInstance as ViewModel;//获取来自动物验证的animalErrors = aevm.Animal.GetErrors(" Epc ")?.Cast();//将来自动物验证的错误添加到您的Epc验证结果var error = animalErrors?.Aggregate(string.Empty,( current,animalError) => current+ animalError);//返回聚集错误Epc属性返回string.IsNullOrEmpty(错误)?ValidationResult.Success :新ValidationResult(错误,新列表{ "Epc“});}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39659965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档