首页 > 其他分享 >wpf ValidationRule 校验数据输入

wpf ValidationRule 校验数据输入

时间:2024-08-13 20:42:12浏览次数:12  
标签:ValidationRule return 校验 allValidationsSucceeded bool child false wpf dependency

public class CountValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            double d = 0.0;
            if (double.TryParse((string)value, out d) )
            {
                return new ValidationResult(true, "OK");
            }
            else
            {
                return new ValidationResult(false, "无法解析输入");
            }
        }
    }

引入规则

 <UserControl.Resources>
        <ResourceDictionary>
            <converter:CountValidationRule x:Key="CountValidationRule"/>
        </ResourceDictionary>
    </UserControl.Resources>

使用规则

<TextBox hc:InfoElement.Title="纬度:  " >
    <TextBox.Text>
        <Binding Path="StationInfo.Latitude">
            <Binding.ValidationRules>
                <converter:CountValidationRule/>
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

如果需要校验界面是否包含未解决的报错可以获取页面所有的报错信息


public bool AreAllValidationsSucceeded(DependencyObject dependencyObject)
        {
            bool allValidationsSucceeded = true;

            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, i);

                if (child is FrameworkElement)
                {
                    FrameworkElement frameworkElement = child as FrameworkElement;

                    // 检查绑定错误
                    if (Validation.GetHasError(frameworkElement))
                    {
                        allValidationsSucceeded = false;
                        break; // 一旦发现有错误,就不再遍历
                    }
                }

                // 递归遍历子元素
                if (!AreAllValidationsSucceeded(child))
                {
                    allValidationsSucceeded = false;
                    break;
                }
            }

            return allValidationsSucceeded;
        }

调用

 bool allValidationsSucceeded = AreAllValidationsSucceeded(this);


            if (!allValidationsSucceeded)
            {
                return;
            }
//TODO

标签:ValidationRule,return,校验,allValidationsSucceeded,bool,child,false,wpf,dependency
From: https://www.cnblogs.com/ives/p/18357635

相关文章

  • 【WPF】【XAML】Exception: 无法找到名为“xx”的资源。资源名称区分大小写。
    <Grid.Resources>一定要放在使用之前,比如<ListBoxName="peopleListBox"Grid.Column="1"Grid.Row="2"ItemsSource="{BindingSource={StaticResourceExpenseDataSource},XPath=Person}"ItemTemplate="{StaticResour......
  • wpf 如何写一个圆形的进度条
    先看一下效果吧调用代码如下<local:CycleProgressBarWidth="100"Height="100"Background="#FFF68986"Foreground="#FFFA1F09"Maximum="100"Minimum="0"Value="20"IsIndeter......
  • wpf GMap
    AMapProviderBasepublicabstractclassAMapProviderBase:GMapProvider{publicAMapProviderBase(){MaxZoom=null;RefererUrl="http://www.amap.com/";//Copyright=string.Format("©{0}高德Corporation,©{0}......
  • wpf 如何7步写一个badge控件
    首先看一下效果: 任意控件可以附加一个文字在控件的右上角,并带有红色背景第一步,新建一个空的wpf项目:第二步,创建一个类,取名为badge:第三步,将badge的父类设置成  System.Windows.Documents.AdornerpublicclassBadge:Adorner{publicBadge(UIElemen......
  • koa中使用joi进行参数校验
    koa中使用joi进行参数校验超人鸭关注IP属地:广东0.312021.07.0618:23:59字数1,395阅读6,498在编写api的时候通常都需要对参数进行校验,包括参数的类型、必填等;如果是字符串,是否可以为空、该符合什么规则等;如果是数字,最大值最小值是什么等等等等。在koa中我推荐使用 j......
  • 界面控件DevExpress WPF v24.1系统环境配置要求
    DevExpressWPF 拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中......
  • 025.Vue3入门,父页面给子页面传递数据,校验Props给出默认值
    1、App.vue代码:<template><Father/></template><scriptsetup>importFatherfrom'./view/Father.vue'</script><style></style>2、Father.vue代码<template><h3>父页面</h3><Chil......
  • wpf 使用razor
    WPFBlazorChat\RazorViews\Counter.razor<h1>Counter</h1><p>好开心,你点我了,现在是:<spanstyle="color:red;">@currentCount</span></p><buttonclass="btnbtn-primary"@onclick="IncrementCount"&g......
  • wpf项目如何使用blazor组件
    依然使用上面的工程,添加Blazor支持,此部分参考微软文档生成WindowsPresentationFoundation(WPF)Blazor应用,本小节快速略过。2.1编辑工程文件WPFBlazorChat.csproj在项目文件的顶部,将SDK更改为Microsoft.NET.Sdk.Razor。添加节点<RootNameSpace>WPFBlazorChat</RootN......
  • 通信编码揭秘:(二)信道编码(汉明码、循环冗余校验码、里德所罗门码)与其应用
    通信编码揭秘:2.信道编码(汉明码、循环冗余校验码、里德所罗门码)与其应用摘要信道编码的目的是提高数据传输的可靠性,确保即使在噪声环境下传输的数据也能被正确接收。本文将探讨汉明码、循环冗余校验(CRC)和里德-所罗门码三种常见的信道编码方法,并通过实际例子说明它们的应用......