一、简介
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。
MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。
ViewModel可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。
V:视图(窗体)
P、C、VM:封装了窗体中的所有操作、响应用户的输入输出、事件等
MVP(Model-View-Presenter)里的P与MVC里的C差不多,区别是MVC是系统级架构的,而MVP是用在某个特定页面上的,也就是说MVP的灵活性要远远大于MVC,实现起来也极为简单。
View绑定到ViewModel,然后执行一些命令在向它请求一个动作。
而反过来,ViewModel跟Model通讯,告诉它更新来响应UI。
在MVP模式中,为了让UI层能够从逻辑层上分离下来,设计师们在UI层与逻辑层之间加了一层interface。
无论是UI开发人员还是数据开发人员,都要尊重这个契约、按照它进行设计和开发。
这样,理想状态下无论是Web UI还是Window UI就都可以使用同一套数据逻辑了。
二、MVVC构成:
1、模型M
代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。
2、视图V
用户在屏幕上看到的结构、布局和外观(UI)。
3、视图模型VM
暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。
4、绑定器
声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。声明性数据绑定技术的出现是实现该模式的一个关键因素。
三、例子
https://blog.csdn.net/rui0720/article/details/9821085?locationNum=10&fps=1
指正一下上面部分代码的错误
1 public DelegateCommand SaveCommond { get; set; } 2 3 public MainViewModel() 4 { 5 SaveCommond = new DelegateCommand((obj) => SaveFile()); 6 }
改为
public DelegateCommand SaveCommand { get { return new DelegateCommand((arg) => SaveFile()); } }
否则实现不了按键功能。
这个的例子是对的: