5分钟入门WPF和FluentValidation数据验证

文章目录

    • [🌟 什么是 FluentValidation?](#🌟 什么是 FluentValidation?)
    • [🔧 核心特点](#🔧 核心特点)
    • [🧩 常见应用场景](#🧩 常见应用场景)
    • [📚 官方资源](#📚 官方资源)
    • [📦 5分钟入门](#📦 5分钟入门)
    • [1. 安装依赖](#1. 安装依赖)
    • [2. 定义数据模型](#2. 定义数据模型)
    • [3. 创建验证规则](#3. 创建验证规则)
    • [4. 在ViewModel中集成验证](#4. 在ViewModel中集成验证)
    • [5. 在UI中显示验证错误](#5. 在UI中显示验证错误)
    • 总结

🌟 什么是 FluentValidation?

FluentValidation 是一个用于 .NET 应用程序的轻量级、类型安全的验证库,它允许你以流利的(Fluent)API 风格 为你的业务对象定义验证规则。

与传统的 IDataErrorInfo 或数据注解(Data Annotations)相比,FluentValidation 提供了更强大、灵活且易于维护的验证方式。


🔧 核心特点

特性 描述
✅ 流式 API 使用 C# Lambda 表达式定义验证规则,语法简洁直观
✅ 强类型验证 支持编译时检查,减少运行时错误
✅ 可扩展性强 支持自定义验证器、条件规则、异步验证等
✅ 与 MVVM 兼容 可轻松集成到 WPF、Blazor、ASP.NET Core 等框架中
✅ 多平台支持 支持 .NET Core、.NET 5/6/7/8、Mono 等

🧩 常见应用场景

  • ASP.NET Core 请求模型验证
  • ✅ WPF / WinForms 数据绑定验证
  • ✅ Blazor 表单提交校验
  • ✅ 后端服务层参数校验(如 DTO)

📚 官方资源

📦 5分钟入门


1. 安装依赖

首先在项目中添加FluentValidation包引用:

xml 复制代码
<ItemGroup>
  <PackageReference Include="FluentValidation" Version="12.0.0" />
</ItemGroup>

2. 定义数据模型

创建一个简单的用户模型类:

csharp 复制代码
public class User
{
    public string Username { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

3. 创建验证规则

使用FluentValidation定义验证规则:

csharp 复制代码
public class UserValidator : AbstractValidator<User>
{
    public UserValidator()
    {
        RuleFor(u => u.Username)
            .NotEmpty().WithMessage("用户名不能为空")
            .MinimumLength(3).WithMessage("用户名至少3个字符");

        RuleFor(u => u.Email)
            .NotEmpty().WithMessage("邮箱不能为空")
            .EmailAddress().WithMessage("邮箱格式不正确");

        RuleFor(u => u.Password)
            .NotEmpty().WithMessage("密码不能为空")
            .MinimumLength(6).WithMessage("密码至少6个字符");
    }
}

4. 在ViewModel中集成验证

在ViewModel中调用验证器并处理验证结果:

csharp 复制代码
private readonly UserValidator _validator = new();

private void Validate()
{
    var user = new User
    {
        Username = Username,
        Email = Email,
        Password = Password,
    };

    ValidationResult results = _validator.Validate(user);

    if (results.IsValid)
    {
        ValidationErrors = string.Empty;
    }
    else
    {
        ValidationErrors = string.Join("\\n", results.Errors.
        Select(e => e.ErrorMessage));
    }
}

5. 在UI中显示验证错误

在XAML中绑定验证错误信息:

xml 复制代码
<TextBlock Grid.Row="6" Margin="0,10,0,0"
           Foreground="Red"
           Text="{Binding ValidationErrors}" />

总结

FluentValidation提供了强大且灵活的验证规则定义方式,通过MVVM模式可以很好地集成到WPF应用中。这种方法具有以下优点:

  1. 验证规则与业务逻辑分离
  2. 支持复杂的条件验证
  3. 易于维护和扩展
  4. 提供清晰的错误信息
相关推荐
北域码匠1 天前
PID 控制算法完整详解(C# 原生实现,无第三方库)
c#·pid控制·工控开发·闭环控制·自动控制算法·数字pid·增量式pid
离陌在学C#1 天前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#
asdzx671 天前
Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片
java·c#·word
小金子会发光1 天前
C# WinForms 基于 Socket 手搓 Modbus TCP 调试助手(支持 01/02/03/04/05/06/0F/10)
c#·socket·plc·modbus tcp·工业通信
MyBili1 天前
游戏报错缺少dll、无法启动?GRLPackage 运行库合集一键修复指南
游戏·.net·directx·运行库·xna·openal·vc++ redis
慧都小妮子1 天前
PDF图片提取总“褪色“?Aspose.PDF 多层级提取能力详解
pdf·c#·.net·图片处理·文档处理·色彩空间
火云牌神1 天前
如何用项目规则给 AI 划定编码边界
人工智能·系统架构·ai编程·vibecoding
神明不懂浪漫1 天前
【第五章】队列
开发语言·数据结构·经验分享·笔记·算法
-银雾鸢尾-1 天前
C#中的反射关键类-Type
开发语言·c#
Thom5801 天前
【迅投 QMT】QMT如何获取ETF申赎清单?download_etf_info()与get_etf_info()教程
人工智能·经验分享·量化交易·ptrade·量化编程