wcf 简单实践 数据绑定 数据校验

1.概要

1.1 说明

数据校验,如果数据不合适,有提示。

1.2 要点

  • class User : IDataErrorInfo
  • this.DataContext = user;
  • <Window.Resources>
  • <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"></Setter>
  • Text="{Binding Path=Name,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}"

2.代码

2.1 xaml

复制代码
<Window x:Class="WpfApp7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp7"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <local:User x:Key="usecheck"></local:User>
        <Style TargetType="TextBox">
            <Setter Property="Background" Value="#ddd"></Setter>
            <Setter Property="Foreground" Value="Red"></Setter>
            <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"></Setter>
        </Style>
    </Window.Resources>
    <StackPanel>
        <StackPanel.DataContext>
            <Binding Source="{StaticResource usecheck}"></Binding>
        </StackPanel.DataContext>
        <WrapPanel>
            <TextBlock Text="姓名"></TextBlock>
            <TextBox Name="Name" Text="{Binding Path=Name,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
        </WrapPanel>
        <WrapPanel>
            <TextBlock Text="年龄"></TextBlock>
            <TextBox Name="Age" Text="{Binding Path=Age,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
        </WrapPanel>
    </StackPanel>
</Window>

2.2 code

复制代码
using System.ComponentModel;
using System.Windows;

namespace WpfApp7
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        User user = new User();
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = user;
        }
    }
    class User : IDataErrorInfo
    {
        public User()
        {
            this.Name = "dd";
            this.Age = 20;
        }

        public string this[string columnName] {
            get {
                string ret = null;
                switch (columnName)
                {
                    case "Name":
                        if (this.Name.Length <2|| this.Name.Length>3)
                        {
                            return "不合格Name";
                        }
                        break;
                    case "Age":
                        if(this.Age<0|| this.Age > 200)
                        {
                            return "不合格Age";
                        }
                        
                        break;

                }
                return null;
            }
        }

        public String Name { get; set; }
        public int Age { get; set; } = 0;

        public string Error => throw new NotImplementedException();
    }
}

3.试验结果

相关推荐
我命由我123452 小时前
Photoshop - Photoshop 工具栏(67)修补工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
AaronZZH5 小时前
AG-UI:连接 AI 智能体与用户应用的开放协议
人工智能·ui
加农炮手Jinx7 小时前
Flutter for OpenHarmony 实战:疯狂头像 App(三)— 复合动画与交互反馈 — 让 UI 跃动起来
flutter·ui·交互·harmonyos·鸿蒙
WarPigs7 小时前
UI显示任务目的地标记的方法
算法·ui
新缸中之脑12 小时前
用Nano Banana验证UI设计
ui
Rsingstarzengjx15 小时前
【Photoshop从入门到精通】-21 图层进阶 笔记
笔记·ui·photoshop
听麟1 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
@hdd1 天前
Kubernetes 可观测性:Prometheus 监控、日志采集与告警
云原生·kubernetes·wpf·prometheus
赛博切图仔2 天前
告别“打字机”:Generative UI 如何重塑 AI 时代的前端交互?
前端·人工智能·ui