一、MVVM 是什么?
MVVM 是 Model-View-ViewModel 的缩写,是一种设计模式,目的是将 界面(View)、数据(Model) 和 业务逻辑(ViewModel) 分离,让代码更容易维护和测试。
- Model(数据层):负责数据的存储和处理(比如从数据库读取数据)。
- View(界面层):负责显示界面(比如按钮、文本框)。
- ViewModel(逻辑层):连接 View 和 Model,处理业务逻辑(比如点击按钮后做什么)。
+-------------------+ +-------------------+ +-------------------+
| View | | ViewModel | | Model |
+-------------------+ +-------------------+ +-------------------+
| - UI组件 | | - 数据绑定 | | - 数据结构 |
| - 布局 | | - 命令绑定 | | - 业务逻辑 |
| - 数据展示 | | - 数据转换 | | - 数据访问 |
+-------------------+ | - 事件处理 | +-------------------+
| - 业务逻辑 |
+-------------------+
二、为什么要用 MVVM?
假设你开发一个计算器:
- 传统方式:按钮的点击事件直接在界面代码中处理,界面和逻辑混在一起,难以维护。
- MVVM 方式:按钮的点击事件通过 ViewModel 处理,界面只负责显示,代码清晰。
三、MVVM 的核心机制
1. 数据绑定(Data Binding)
- 作用:让 View 和 ViewModel 自动同步数据。
- 示例:文本框的内容绑定到 ViewModel 的属性,当属性变化时,文本框自动更新。
2. 命令(Command)
- 作用:代替传统的事件(如按钮点击事件),让 View 触发 ViewModel 的逻辑。
- 示例:点击按钮时执行 ViewModel 中的
SearchCommand
。
3. 通知机制(INotifyPropertyChanged)
- 作用:当 ViewModel 的数据变化时,通知 View 更新界面。
- 示例:ViewModel 中的
UserName
属性变化时,界面自动显示新名字。
四、委托(Delegate)和事件(Event)
1. 委托(Delegate)
- 是什么:委托是一种“函数指针”,允许将方法作为参数传递。
- 生活例子:你点外卖时,告诉外卖小哥“送到门口”,这里的“送到门口”就是一个委托方法。
// 定义一个委托
public delegate void ShowMessageDelegate(string message);
// 使用委托
public void DisplayMessage(string msg)
{
Console.WriteLine(msg);
}
ShowMessageDelegate delegateExample = DisplayMessage;
delegateExample("Hello, MVVM!"); // 输出:Hello, MVVM!
2. 事件(Event)
- 是什么:事件是基于委托的机制,用于在某个动作发生时通知其他对象。
- 生活例子:按钮的点击事件——当你点击按钮时,会触发一个事件