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.试验结果

相关推荐
muddjsv11 小时前
从用户需求到产品体验:UI/UX 设计核心方法论与实战指南
ui
一起养小猫13 小时前
Axure day2 基础教程完整指南
ui·axure·photoshop
AI_零食14 小时前
红蓝之辨:基于 Flutter 的动静脉血动力学可视化系统开发
flutter·ui·华为·harmonyos·鸿蒙
执笔论英雄15 小时前
【大模型推理】VLLM 引擎使用
wpf·vllm
LateFrames15 小时前
动画性能比对:WPF / WinUI3 / WebView2
wpf·webview·用户体验·winui3
灵感菇_15 小时前
深入解析 Android事件分发机制
android·ui
尤老师FPGA1 天前
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第四十五讲)
android·java·ui
CodeCraft Studio1 天前
从框架到体验:Qt + Qtitan 构建制造业嵌入式UI整体解决方案
开发语言·qt·ui·gui·嵌入式开发·hmi·制造业嵌入式ui
AI_零食1 天前
鸿蒙的flutter框架表达:生命律动系统
学习·flutter·ui·华为·harmonyos·鸿蒙
AI_零食1 天前
鸿蒙跨端框架 Flutter 学习 Day 6:Future 在 UI 渲染中的心跳逻辑
学习·flutter·ui·华为·harmonyos·鸿蒙