首页 > 其他分享 >如何利用 IDataErrorInfo 实现数据校验

如何利用 IDataErrorInfo 实现数据校验

时间:2023-11-02 20:11:21浏览次数:31  
标签:string columnName 校验 利用 Error IDataErrorInfo public 属性

一、定义:

ValidatesOnDataErrors 是一种在 WPF 中实现数据校验的方式,可以通过在 XAML 中设置属性 ValidatesOnDataErrors 为 True 来启用。 二、使用: ① 在 ViewModel 中实现 IDataErrorInfo 接口,该接口定义了两个属性:Error 和 Item[string columnName]   —— Error 属性返回 ViewModel 中所有错误的描述信息;   —— Item[string columnName] 属性返回指定属性的错误描述信息。   ② 在 XAML 中设置 Binding 的 ValidatesOnDataErrors 属性为 True,例如:
<TextBox Text="{Binding Name, ValidatesOnDataErrors=True}" />

③ 在 ViewModel 中对需要校验的属性设置注解,例如:

public class Person : IDataErrorInfo
{
    public string Name { get; set; }
    public int Age { get; set; }

    public string this[string columnName]
    {
        get
        {
            string error = null;
            switch (columnName)
            {
                case "Name":
                    if (string.IsNullOrEmpty(Name))
                        error = "Name不能为空";
                    break;
                case "Age":
                    if (Age < 0 || Age > 120)
                        error = "Age必须在0到120之间";
                    break;
            }
            return error;
        }
    }

    public string Error
    {
        get { return null; }
    }
}
在this[string columnName]方法中,我们可以根据传入的列名判断该列的值是否合法: —— 如果不合法则返回对应的错误信息。 —— 如果返回 null 或者空字符串,则表示该属性的值是有效的。   Error方法:我们可以判断整个数据模型的值是否合法,如果不合法则返回对应的错误信息.   注意: 如果在this[string columnName]方法中返回了错误信息,则Error方法不会被调用。 只有当所有属性的值都合法时,Error方法才会被调用。 因此,在实现IDataErrorInfo接口时,我们需要在this[string columnName]方法中尽可能地判断属性的值是否合法,以减少Error方法的调用次数。       ④ 在界面上输入数据时,如果校验失败,会在控件旁边显示红色感叹号图标,鼠标悬浮在图标上可显示错误信息。

标签:string,columnName,校验,利用,Error,IDataErrorInfo,public,属性
From: https://www.cnblogs.com/LXLR/p/17806194.html

相关文章

  • 技术教程 —— 如何利用 SEI 实现音画同步?
     摘要:利用SEI解决数据流录制回放过程中的音画不同步问题。 文|即构Web SDK开发团队今年 6 月, ZEGO即构科技推出了行业内首套数据流录制PaaS 方案,打破传统录制服务传统,实现 100%录制还原效果(点击查看方案介绍文章)。在实现数据流录制回放的过程中,我们需要将音视频画面......
  • python爬虫利用代理IP分析大数据
    前言随着互联网快速发展和普及,数据已经成为企业和个人决策的重要依据。而爬虫技术正是获取数据的重要手段,而代理IP则是爬虫技术中非常重要的一个环节。通过使用代理IP,可以突破网站的限制,获取更多的信息。本文将介绍如何使用Python爬虫利用代理IP分析大数据,同时提供代码案例。一、什......
  • 利用云计算和微服务架构开发可扩展的同城外卖APP
    如今,同城外卖APP已经成为了人们点餐的主要方式之一。然而,要构建一款成功的同城外卖APP,不仅需要满足用户的需求,还需要具备可扩展性,以适应快速增长的用户和订单量。一、了解同城外卖APP的需求在着手开发同城外卖APP之前,我们需要深入了解用户和业务需求。这包括用户希望能够浏览菜单、......
  • 利用LLM大模型和智能问答BI实现智能报表生成
    随着人工智能技术的不断发展和应用,利用LLM大模型和智能问答BI生成智能报表已成为众多企业和组织的重要工作之一。本文将重点介绍如何利用LLM大模型和智能问答BI生成智能报表,帮助读者更好地理解其中的关键技术和应用实践。一、LLM大模型的应用LLM大模型是指大型语言模型,它代表了人工......
  • django搭建平台实战教程三:接口编写及权限校验(前后端分离)
    自定义权限校验注册增加group_id字段...@api_view(['POST'])defregister(request:Request):ifDUser.objects.filter(username=request.data["username"]).count()>0:returnResponse({"code":400,&qu......
  • 利用 ChatGPT-Next 搭建本地的 ChatGPT
    默认ChatGPTNext不支持使用Azure服务,略微进行了修改。(1)修改了openai.ts(仅二处)(3)启动web后,设置接口地址(3)使用>yarndev启动服务为了以后每次使用方便,写一个简单的脚本。@echooffcd/dF:\workspace\ChatGPT-Next-Webyarndev......
  • Redis队列升级版利用Spring项目BeanDefinition自动注入
    利用Redis实现队列先进先出队列:https://www.cnblogs.com/LiuFqiang/p/16366813.html延迟队列:https://www.cnblogs.com/LiuFqiang/p/16592522.html定长队列:https://www.cnblogs.com/LiuFqian/p/17372463.html在使用Redis做消息队列的时候,需要配置队列属性的bean,如果自己项目......
  • 前端利用oss图片地址返回url下载zip包
    //首先引入插件npminstalljszip//导入项目importJSZipfrom'jszip'//利用canvas.toDataURL转换base64方法下载图片downZip(){//测试数据letdownLoadImageList=['https://img1.baidu.com/it/u=1112636550,1561836273&fm=253&app=120&siz......
  • 利用CSS 实现环形百分比进度展示
    先看效果图: UI设计了这样的效果,已读人数占总人数的百分比,环形展示。这里可以用echarts图表,也可以用css实现,因为我是在小程序环境下,考虑到包大小体积,采用了css实现。核心就是一行代码:background-image:conic-gradient(#e9e9e930deg,transparent30deg);这个只是一个静......
  • 实战攻防演练-Linux写入ssh密钥,利用密钥登录
    前言密钥形式登录的原理是利用密钥生成器制作一对密钥,一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过SSH暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也......