MVVM(Model-View-ViewModel)详解(附实战案例)

        MVVM(Model-View-ViewModel)是一种软件架构模式,常用于构建客户端应用程序,特别是在WPF(Windows Presentation Foundation)和Silverlight应用中,它将应用程序分为三个主要部分:

一、项目结构

1. Model(模型)

表示应用程序的数据和业务逻辑。它包含数据对象和处理这些数据的业务规则,与用户界面无关。

2. View(视图)

负责用户界面的呈现,如WPF中的窗口、页面等。它只关注如何展示数据,不包含业务逻辑。

3.ViewModel(视图模型)

:作为View和Model之间的桥梁。它从Model获取数据并进行处理,然后提供给View使用,同时也处理View的用户交互事件并更新Model。

二、MVVM的逻辑结构:

        View和ViewModel之间通过数据绑定(Data Binding)进行通信。View可以自动反映ViewModel中数据的变化,而ViewModel可以接收View的用户输入。

         ViewModel和Model之间通过方法调用进行交互。ViewModel调用Model的方法来获取或更新数据。

具体细节和实现步骤

1. 创建Model:定义数据类和业务逻辑类。

2. 创建ViewModel:继承自 INotifyPropertyChanged 接口,以便在属性值变化时通知View。在ViewModel中定义属性和命令(Commands)。

3. 创建View:在XAML中进行数据绑定,将View的控件属性绑定到ViewModel的属性上。

4. 设置DataContext:在View的代码隐藏文件中,将View的 DataContext 设置为ViewModel的实例。

ViewModel是什么:

        ViewModel是MVVM架构中的核心部分,它包含了View所需的数据和行为。它将业务逻辑从View中分离出来,使得View只关注用户界面的呈现,而ViewModel负责处理数据和用户交互。

        在CAD中应用MVVM的简单案例代码和注释:

假设我们有一个简单的CAD应用,需要在视图中显示一个矩形的位置和大小。

效果如下:

1. Model类 (RectangleModel.cs)

 2. ViewModel类 (RectangleViewModel.cs)

// RectangleViewModel.cs
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using CadMvvmExample;
using WpfCircleGenerator.ViewModels;

namespace CadMvvmExample
{
    /// <summary>
    /// 矩形视图模型
    /// 处理业务逻辑和数据绑定
    /// </summary>
    public class RectangleViewModel : INotifyPropertyChanged
    {
        private readonly RectangleModel _model = new()
        {
            X = 10,
            Y = 10,
            Width = 100,
            Height = 50
        };

        public double X
        {
            get => _model.X;
            set { _model.X = value; OnPropertyChanged(); }
        }

        public double Y
        {
            get => _model.Y;
            set { _model.Y = value; OnPropertyChanged(); }
        }

        public double Width
        {
            get => _model.Width;
            set
            {
                if (value <= 0) throw new ArgumentException("宽度必须大于0");
                _model.Width = value;
                OnPropertyChanged();
            }
        }

        public double Height
        {
            get => _model.Height;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值