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;