编辑
2025-11-25
C#
00

目录

引言
MVVM 设计模式概述
1. 什么是 MVVM?
2. MVVM 的优势
CommunityToolkit.Mvvm 简介
1. 什么是 CommunityToolkit.Mvvm?
2. 主要特性
在 WinForms 中应用 MVVM
1. 项目准备
2. 实践示例:简单的计算器
(1)创建 Model
(2)创建 ViewModel
(3)更新 View(WinForms 窗体)
(4)运行效果
3. 代码解析
总结

引言

随着软件应用的复杂性和用户界面的需求日益增长,传统的开发模式已难以满足高效开发和维护的需要。MVVM(Model-View-ViewModel)作为一种设计模式,提供了清晰的架构,解耦了界面和业务逻辑,提升了代码的可维护性和可测试性。本文将详细介绍 MVVM 设计模式,并结合 CommunityToolkit.Mvvm,在 WinForms 应用中演示其实际应用。

MVVM 设计模式概述

1. 什么是 MVVM?

MVVM 是一种架构设计模式,将应用程序分为三个核心组件:

  • Model(模型):表示应用程序的业务逻辑和数据模型。
  • View(视图):用户界面,负责数据的呈现和用户交互。
  • ViewModel(视图模型):连接 View 和 Model 的桥梁,处理视图逻辑和命令。

2. MVVM 的优势

  • 解耦:分离视图和业务逻辑,便于团队协作和代码维护。
  • 数据绑定:实现视图和数据的双向绑定,减少手动更新界面的工作。
  • 可测试性:业务逻辑集中在 ViewModel,使得单元测试更容易编写。

CommunityToolkit.Mvvm 简介

1. 什么是 CommunityToolkit.Mvvm?

CommunityToolkit.Mvvm 是微软提供的开源 MVVM 框架,轻量级且功能强大,旨在简化 MVVM 模式的实现。它提供了属性更改通知、命令、消息传递等常用功能。

2. 主要特性

  • ObservableObject:基类,实现了 INotifyPropertyChanged 接口,简化属性通知。
  • RelayCommand:实现命令模式,方便处理用户交互事件。
  • ObservableCollection:支持集合的变化通知。

在 WinForms 中应用 MVVM

虽然 WinForms 并非为 MVVM 设计,但通过 CommunityToolkit.Mvvm,我们仍然可以在 WinForms 中应用 MVVM 模式。

1. 项目准备

  • 创建一个新的 WinForms 项目。
  • 使用 NuGet 安装 CommunityToolkit.Mvvm 包。
Bash
Install-Package CommunityToolkit.Mvvm

image.png

2. 实践示例:简单的计算器

我们将创建一个简单的计算器应用,实现两个数字相加的功能。

(1)创建 Model

C#
public class CalculatorModel { public double Number1 { get; set; } public double Number2 { get; set; } }

(2)创建 ViewModel

C#
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AppMVVM { public partial class CalculatorViewModel : ObservableObject { private readonly CalculatorModel _calculatorModel; public CalculatorViewModel() { _calculatorModel = new CalculatorModel(); } [ObservableProperty] private double number1; [ObservableProperty] private double number2; [ObservableProperty] private double result; [RelayCommand] private void Add() { Result = Number1 + Number2; } } }

(3)更新 View(WinForms 窗体)

在设计器中添加以下控件:

  • 两个 TextBox,用于输入数字。
  • 一个 Button,用于触发计算。
  • 一个 Label,用于显示结果。

Form 的构造函数中,绑定 ViewModel:

C#
namespace AppMVVM { public partial class Form1 : Form { private readonly CalculatorViewModel _viewModel; public Form1() { InitializeComponent(); _viewModel = new CalculatorViewModel(); // 绑定数据 txtNumber1.DataBindings.Add("Text", _viewModel, nameof(_viewModel.Number1), true, DataSourceUpdateMode.OnPropertyChanged); txtNumber2.DataBindings.Add("Text", _viewModel, nameof(_viewModel.Number2), true, DataSourceUpdateMode.OnPropertyChanged); lblResult.DataBindings.Add("Text", _viewModel, nameof(_viewModel.Result)); // 绑定命令 btnAdd.Click += (s, e) => _viewModel.AddCommand.Execute(null); } } }

(4)运行效果

image.png

输入两个数字,点击“计算”按钮,即可在标签上看到结果。

3. 代码解析

  • ObservableProperty:自动生成属性的 getter、setter 以及属性变化通知。
  • RelayCommand:简化命令的创建,无需手动实现 ICommand 接口。
  • 数据绑定:利用 WinForms 的数据绑定机制,将控件与 ViewModel 属性关联。

总结

通过上述示例,我们在 WinForms 中成功应用了 MVVM 设计模式。尽管 WinForms 不是为 MVVM 量身定制,但借助 CommunityToolkit.Mvvm,我们仍然可以享受到 MVVM 带来的优势,如代码解耦、数据绑定和更好的可测试性。

本文作者:技术老小子

本文链接:

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