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

相关推荐
狮恒38 分钟前
OpenHarmony Flutter 分布式任务调度:跨设备资源协同与负载均衡方案
分布式·flutter·wpf·openharmony
嗝o゚1 小时前
Flutter适配鸿蒙多屏异构UI开发实战
flutter·开源·wpf·harmonyos
小白|2 小时前
Flutter 与 OpenHarmony 深度集成:实现跨设备传感器数据协同监测系统
flutter·wpf
棉晗榜2 小时前
WPF输入框里面加文本提示
wpf
嗝o゚2 小时前
鸿蒙跨端协同与Flutter结合的远程办公轻应用开发
flutter·华为·wpf
豫狮恒2 小时前
OpenHarmony Flutter 分布式权限管理:跨设备可信访问与权限协同方案
分布式·flutter·wpf·openharmony
小白|2 小时前
Flutter 与 OpenHarmony 深度整合:构建跨设备统一剪贴板同步系统
flutter·wpf
He BianGu2 小时前
【笔记】在WPF中如何使用ContentPresenter 与 Generic.xaml 设置数据默认 DataTemplate
windows·笔记·wpf
小白|3 小时前
Flutter 与 OpenHarmony 深度融合:实现分布式文件共享与跨设备协同编辑系统
分布式·flutter·wpf
豫狮恒3 小时前
OpenHarmony Flutter 分布式数据持久化:跨设备数据一致性与同步方案
分布式·安全·flutter·wpf·openharmony