百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

C# MVVM 设计模式简介(c#mvvm模式案例)

ccwgpt 2025-04-06 14:20 21 浏览 0 评论

引言

随着软件应用的复杂性和用户界面的需求日益增长,传统的开发模式已难以满足高效开发和维护的需要。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 包。
Install-Package CommunityToolkit.Mvvm

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

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

(1)创建 Model

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

(2)创建 ViewModel

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:

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)运行效果

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

3. 代码解析

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

总结

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

相关推荐

Spring WebFlux vs. Spring MVC(springboot是什么)

背景随着异步I/O和Netty等框架的流行,响应式编程逐渐走入大众的视野。但是,响应式编程本身并不是太新的概念,这个术语最早出现在1985年DavidHarel和AmirPnue...

深度解析微服务高并发:适配SpringMVC框架适配模块及实现原理

适配主流框架如果不借助Sentinel提供的适配主流框架的模块,则在使用Sentinel时需要借助try-catchfinally将要保护的资源(方法或代码块)包起来,在目标方法或代码块执行之前,调...

Spring MVC 底层原理深度解析:从请求到响应的全链路拆解

一、Servlet容器与DispatcherServlet的启动博弈1.Tomcat初始化阶段java//Tomcat初始化流程StandardContext#startInterna...

改造总结之传统SpringMVC架构转换为SpringBoot再到集群

改造出发点,是基于现在服务都在向上云的目标前进,传统SpringMVC难以满足项目持续构建、服务节点任意扩展的需求,所以开始了历史项目的改造。项目改造考虑的主要是兼容以前的业务代码,以及session...

SpringBoot3 整合 Spring MVC 全解析:开启高效 Web 开发之旅

在当今的JavaWeb开发领域,Spring框架家族无疑占据着重要的地位。其中,SpringBoot3和SpringMVC更是开发者们构建强大、高效Web应用的得力工具。今天,...

一文读懂SpringMVC(一文读懂!残疾人低保边缘家庭能领的超实用福利政策)

1.SpringMVC定义1.1.MVC定义Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据View(视图):是应用程序中处理数据显示的部分。通常...

69 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)

SpringMVC框架的注解为Web开发提供了一种简洁而强大的声明式方法。从控制器的定义、请求映射、参数绑定到异常处理和响应构建,这些注解涵盖了Web应用程序开发的各个方面。它们不仅简化了编码工作,...

Spring MVC工作原理:像拼积木一样构建Web应用

SpringMVC工作原理:像拼积木一样构建Web应用在Java的Web开发领域,SpringMVC无疑是一个让人又爱又恨的存在。它像一位神通广大的积木搭建大师,将一个个分散的功能模块巧妙地拼接在...

5千字的SpringMVC总结,我觉得你会需要

思维导图文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary概述SpringMVC再熟悉不过的框架了,因为现在最火的...

SpringMVC工作原理与优化指南(springmvc工作原理和工作流程)

SpringMVC工作原理与优化指南在现代Java开发中,SpringMVC无疑是构建Web应用程序的首选框架之一。它以其优雅的设计和强大的功能吸引了无数开发者。那么,SpringMVC究竟是如何工作...

Spring MVC框架源码深度剖析:从入门到精通

SpringMVC框架源码深度剖析:从入门到精通SpringMVC框架简介SpringMVC作为Spring框架的一部分,为构建Web应用程序提供了强大且灵活的支持。它遵循MVC(Model-V...

3000字搞明白SpringMVC工作流程、DispatcherServlet类、拦截器!

SpringMVC基础虽然SpringBoot近几年发展迅猛,但是SpringMVC在Web开发领域仍然占有重要的地位。本章主要讲解SpringMVC的核心:DispatcherServlet类...

多年经验大佬用2000字透彻解析SpringMVC的常用注解及相关示例

SpringMVC注解SpringMVC框架提供了大量的注解,如请求注解、参数注解、响应注解及跨域注解等。这些注解提供了解决HTTP请求的方案。本节主要讲解SpringMVC的常用注解及相关示例...

知乎热议:如何成为前端架构师,赚百万年薪?

作者|慕课网精英讲师双越最近有一条知乎热议:从一个前端工程师,如何根据目标,制定计划,才能快速进阶成为前端架构师?不久之前我参与了一次直播,讲到了自己对于Web前端架构师的理解。架构师这个角色...

学习笔记-前端开发架构设计(前端架构设计方案)

前端开发的技术选项主要包含以下几点,下面对一些名词概念的解释做了笔记:1、分层架构:把功能相似,抽象级别相近的实现进行分层隔离优势:松散耦合(易维护,易复用,易扩展)常见分层方式:MVC,MVVM2、...

取消回复欢迎 发表评论: