编辑
2025-09-19
C#
00

目录

定义简单的数据模型
示例:定义一个 Person 模型
使用数据注解进行模型验证
示例:为 Person 模型添加数据注解
实现模型验证
示例:在视图模型中触发模型验证
WINFORM界面调用
结论

在开发基于 WinForms 的应用程序时,采用 MVVM(模型-视图-视图模型)设计模式可以显著提高应用程序的可维护性和可扩展性。CommunityToolkit.Mvvm 是一个强大的库,它提供了一系列工具和功能,帮助开发者在 WinForms 应用中实现 MVVM 设计模式。本文将重点介绍如何在 WinForms 应用程序中使用 CommunityToolkit.Mvvm 定义简单的数据模型,并通过数据注解进行模型验证。

定义简单的数据模型

在 MVVM 设计模式中,模型(Model)代表应用程序的数据和业务逻辑。在 CommunityToolkit.Mvvm 中,我们通常通过创建 POCO(Plain Old CLR Object)类来定义模型,并利用 ObservableObject 类实现属性变更通知。

示例:定义一个 Person 模型

C#
using CommunityToolkit.Mvvm.ComponentModel; public partial class Person : ObservableObject { private string name; private int age; public string Name { get => name; set => SetProperty(ref name, value); } public int Age { get => age; set => SetProperty(ref age, value); } }

在上面的例子中,Person 类继承自 ObservableObject。这使得 Person 类的实例能够在其属性值发生变化时通知视图,从而实现数据绑定。

使用数据注解进行模型验证

数据验证是开发过程中的一个关键步骤,确保模型的状态始终保持有效。在 .NET 中,我们可以通过数据注解(Data Annotations)来实现模型的验证。System.ComponentModel.DataAnnotations 命名空间提供了一组内置的验证属性,如 RequiredStringLengthRange 等,我们可以将这些属性应用于模型的属性上。

示例:为 Person 模型添加数据注解

C#
using System.ComponentModel.DataAnnotations; using CommunityToolkit.Mvvm.ComponentModel; public partial class Person : ObservableObject { private string name; private int age; [Required(ErrorMessage = "Name is required.")] [StringLength(50, ErrorMessage = "Name cannot exceed 50 characters.")] public string Name { get => name; set => SetProperty(ref name, value); } [Range(1, 100, ErrorMessage = "Age must be between 1 and 100.")] public int Age { get => age; set => SetProperty(ref age, value); } }

在上面的代码中,我们为 Name 属性添加了 [Required][StringLength] 注解,为 Age 属性添加了 [Range] 注解。这些注解定义了 NameAge 属性的验证规则。

实现模型验证

虽然数据注解定义了验证规则,但我们还需要在适当的时机触发验证过程,并处理验证结果。在 WinForms 应用中,我们通常在视图模型(ViewModel)中实现模型的验证逻辑。

示例:在视图模型中触发模型验证

C#
using System.ComponentModel.DataAnnotations; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System.Collections.Generic; using System.Linq; public partial class PersonViewModel : ObservableObject { private Person person = new Person(); public Person Person { get => person; set => SetProperty(ref person, value); } public RelayCommand SaveCommand { get; } public PersonViewModel() { SaveCommand = new RelayCommand(Save); } private void Save() { var validationResults = new List<ValidationResult>(); var context = new ValidationContext(Person); if (!Validator.TryValidateObject(Person, context, validationResults, true)) { // 处理验证失败的情况 var errors = string.Join("\n", validationResults.Select(v => v.ErrorMessage)); MessageBox.Show(errors, "Validation Errors", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // 处理保存逻辑 } }

在上面的代码中,Save 方法首先尝试验证 Person 对象。如果验证失败,它将收集所有验证错误并显示给用户。这样,我们就能确保只有在 Person 对象通过所有验证规则时,才执行保存逻辑。

WINFORM界面调用

C#
public partial class Form1 : Form { private PersonViewModel viewModel; public Form1() { InitializeComponent(); viewModel = new PersonViewModel(); // 设置数据绑定 txtName.DataBindings.Add("Text", viewModel.Person, "Name", false, DataSourceUpdateMode.OnPropertyChanged); txtAge.DataBindings.Add("Text", viewModel.Person, "Age", false, DataSourceUpdateMode.OnPropertyChanged); btnSave.Click += (s, e) => viewModel.SaveCommand.Execute(null); } }

image.png

  • 我们使用了 DataBindings.Add 方法来创建数据绑定。这个方法的参数分别是:要绑定的控件属性("Text")、数据源(viewModel.Person)、数据源属性("Name""Age")以及其他一些选项,如何何时更新数据源(DataSourceUpdateMode.OnPropertyChanged)。
  • 按钮的点击事件与视图模型中的命令绑定。这可以通过在表单的构造函数中为按钮的 Click 事件添加一个事件处理程序来实现,该处理程序将调用视图模型中的 SaveCommand.Execute 方法。

结论

在 WinForms 应用程序中使用 CommunityToolkit.Mvvm 定义数据模型并进行数据注解验证是一种有效的方式,可以确保应用程序的数据完整性和一致性。通过上述示例,我们展示了如何定义一个简单的数据模型,如何使用数据注解定义验证规则,以及如何在视图模型中实现和处理模型验证。这些概念和技术为开发高质量的 WinForms 应用程序提供了坚实的基础。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!