首页 > 其他分享 >WPF 数据校验

WPF 数据校验

时间:2024-08-27 13:38:24浏览次数:10  
标签:OnPropertyChanged string 校验 value WPF 数据 public name

 一、新建NameValidationRule类
 public class NameValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            var length = value.ToString().Length;
            if (length >= 2 && length <= 10)
            {
                return new ValidationResult(isValid: true, errorContent: "");
            }
            return new ValidationResult(isValid: false, errorContent: "用户名长度为2-10");
        }
    }
public class MyBindingBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        //protected virtual void OnPropertyChanged(string propertyName)
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")//此处使用特性
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
public class MyValidationRuleViewModel : MyBindingBase
    {
        private string name = "2222222222222";

        public string Name
        {
            get { return name; }
            set
            {
                name = value;
                OnPropertyChanged();//OnPropertyChanged(nameof(name),使用特性,去掉括号的值
            }
        }
    }
    <Window.DataContext>
        <viewModel:MyValidationRuleViewModel />
    </Window.DataContext>
    <Grid>
        <StackPanel Width="300" Height="200">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="姓名:" />
                <TextBox x:Name="txtName" Width="120">
                    <TextBox.Text>
                        <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:NameValidationRule ValidatesOnTargetUpdated="True" />
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                    <Validation.ErrorTemplate>
                        <ControlTemplate>
                            <DockPanel>
                                <TextBlock Margin="10,0,0,0"
                                           DockPanel.Dock="Right"
                                           Foreground="Red"
                                           Text="{Binding ElementName=AdornedElementPlaceholder, Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}" />
                                <AdornedElementPlaceholder x:Name="AdornedElementPlaceholder" />
                            </DockPanel>
                        </ControlTemplate>
                    </Validation.ErrorTemplate>
                </TextBox>
            </StackPanel>
        </StackPanel>
        <Button Content="Button" HorizontalAlignment="Left" Margin="89,254,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
    </Grid>
注: ValidatesOnTargetUpdated="True" 表示默认值也参与校验,为false默认值不参与校验
       后台代码:
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // 获取名称的错误消息
            var nameErrorMsg = Validation.GetErrors(txtName)[0].ErrorContent.ToString();
        }

 

标签:OnPropertyChanged,string,校验,value,WPF,数据,public,name
From: https://www.cnblogs.com/ywtssydm/p/18382521

相关文章

  • 闲置物品|基于SprinBoot+vue的校园闲置物品交易平台(源码+数据库+文档)
    校园闲置物品交易平台目录基于SprinBoot+vue的校园闲置物品交易平台一、前言二、系统设计三、系统功能设计 5.1系统功能实现5.2管理员模块实现5.3用户模块实现四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:......
  • 图书借还|基于SprinBoot+vue图书借还管理系统(源码+数据库+文档)
    目录基于SprinBoot+vue的图书借还管理系统一、前言二、系统设计三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考七、最新计算机毕设选题推荐八、源码获取:博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创......
  • 【YOLO系列】YOLO 数据集格式与训练日志
    目录一、YOLO数据集格式二、YOLO训练日志一、YOLO数据集格式YOLO算法的标注格式主要使用.txt文件来存储图像中物体的标注信息。每个图像都有一个对应的.txt文件,文件中的每行表示一个物体的标注,包括物体的类别索引和边界框(boundingbox)的坐标。以下是YOLO标注格式的......
  • WPF C# split picture into small pieces and show in grid cells
    usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;using......
  • Daph:新一代流批一体数据集成与数据处理工具
    Daph源码位于gitee,地址是https://gitee.com/dasea96/daph概述Daph的中文名称是大副,大副是职位仅低于船长的船舶驾驶员,甲板部(驾驶部)负责人,船长的主要助手。Daph的英文名称,取自【有向无环图DirectedAcyclicGraph】的第一个字母与最后三个字母。Daph是一个通用的数据集成与数据......
  • U 盘数据丢失不用怕!这些恢复方法超有效!
    U盘数据怎么恢复?在如今的数字化生活中,U盘就像是我们的随身数据宝库,装满了各种珍贵的资料和回忆。但有时,一个不小心,可能就会让这个宝库出现“漏洞”,数据丢失的情况让人瞬间陷入焦虑。就像前段时间,小李在整理U盘文件时,误删了一份马上要用的重要报告,急得像热锅上的蚂蚁。那到......
  • ETL数据集成丨实现SQLServer数据库的高效实时数据同步
    SQLServer,作为一款功能强大的关系型数据库管理系统(RDBMS),在企业级应用中占据着举足轻重的地位。它不仅提供了可靠的数据存储与管理能力,还集成了高级数据分析、报表服务、集成服务以及商业智能等功能,为复杂业务场景提供了全面的解决方案。SqlServer核心特性高性能与高可用性:SQL......
  • 数据库类型-下载-建立-查看-操作
    关系型数据库:oracle===》收钱,大型的公司msyql===》开源的免费的sqlserver===>微软非关系型数据库:hbase===>大数据‘Redismangdb下载mysql:yuminstallmysqlyuminstallmysql-serverrpm-qa|grep-imysql===》查看数据库有没有安装好servicemysqld......
  • JuiceFS元数据引擎PostgreSQL
    使用PostgreSQL作为JuiceFS元数据引擎,各表的含义和字段做一个简单归纳juicefs数据库用于存储juicefs文件信息postgres=#\lListofdatabasesName|Owner|Encoding|LocaleProvider|Collate|......
  • ThinkPHP 6 + PHP7.4.3nts +nginx 使用mysql和oracle数据库
    ThinkPHP6+PHP7.4.3nts+nginx使用mysql和oracle数据库.前言业务需求,之前使用的php7.3.4nts,mysql自己写的代码,需要对接第三方系统,第三方使用的oracle数据库。之前也是各种的网查,稀里糊涂的成功了。上周五又需要对接,这次用的是php7.4.3nts,各种试了两三天不行,昨晚就突然可以......