C#遇到的坑:终于把MVVM理清楚了[一图搞懂]

一、概述

MVVM的意思和解耦的好处就不说了。

看了猛哥的视频、看了狗哥的视频,似乎看懂了,好像又没看懂。

静下心来,画个图理了理,可算是理明白了。

只是通过一个登录窗口,记录MVVM逻辑,没有实现password的绑定,这需要额外的方法。

图放大还看不清的话可以看连接:【金山文档 | WPS云文档】 WPF MVVM

二、图块说明

分成三大块:

1、VS2022中的文件结构

2、对应的Model-ViewModel-View三大块以及Base之间的大逻辑

3、各文件中代码之间的逻辑,用红、蓝线条表示。

三、线条图例

1、黑色线代表模块对应关系;

2、蓝色线代表数据(Data)执行过程,蓝色虚线代表Notify(数据通知)基类对执行过程的作用,是双向的:界面变化会通知后台,后台变化也会通知界面。

3、红色线代表命令(Command)执行过程,红色虚线代表Command基类对执行过程的作用,是单向的:只是界面向后台发命令;

四、代码执行逻辑

4.1数据[蓝色实线是数据方向,虚线是引用Notify通知基类]

1、View到ViewModel

在登录界面LoginView中的Textbox输入用户名,此时在界面上UserName这个数据就发生了变化。

因为这个Textbox中的内容Text是绑定了UserName这个属性的,他就要想办法通知属性值改变。

怎么通知呢?就要从数据上下文DataContext中找路子。

LoginView下的类文件中的DataContext指定的是LoginViewModel,那就从LoginViewModel中找。

LoginViewModel是继承了“通知接口”的基类NotifyBase的,其中定义了RaisePropertyChanged方法,通过这个方法通知UserName发生了变化。

2、ViewModel到Model

ViewModel中实例化UserModel类,通过RaisePropertyChanged方法通知Model类中定义的UserName属性的值发生改变,也就是View中绑定的值。(UserModel类也可以写在ViewModel中,但是分开写才是MVVM)。

4.2命令[红色实线是命令方向,虚线是引用Command基类]

命令就是界面View到逻辑层ViewModel,因为命令就是执行逻辑。

在登录界面LoginView中点击button按钮,因为这个按钮的Command属性是绑定了ClikLoginCommand这个方法的,他就要想办法去执行这个方法。

怎么执行呢?就要从数据上下文DataContext中找路子。

LoginView下的类文件中的DataContext指定的是LoginViewModel,那就从LoginViewModel中找。

LoginViewModel中引用了ICommand接口定义的基类CommandBase中定义的逻辑方法,就是登录逻辑。因为View界面中用的是“Command”所以可以通过ICommand接口传递命令逻辑。

五、总结

我就是这么理解的,反正是自己搞清楚了,欢迎大佬指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值