LoxodonFramework 数据双向绑定 通过控制数据流向防止更新死循环

本文地址:https://blog.csdn.net/t163361/article/details/109130637
最近准备申请新星创作者,需要2000个粉丝关注,觉得文章有用的,请点一下左侧边栏的关注,谢谢。

框架地址
用这个框架也有一段时间了,刚引入的时候还没感受到MVVM的威力,随着项目的逐渐复杂,才真正感受到
VM和V分离后对于多端项目的巨大优势
目前项目有两套完全不同的界面布局方式,一套对应键盘操作,另一套对应触控操作。
如果按照之前那种逻辑和界面绑定的方式来做,基本是无法完成,同时不同操作揪绕到一起,BUG也是天量的。
感谢框架作者开源这套MVVM框架,使用期间也无数次去翻了wpf,prism,unity(IOC框架)的源码,两相比较,受益匪浅。

下面只是简单罗列这个框架是如何通过区分不同的数据流向,来避免数据被循环更新导致的死循环
框架把VM和V之间的更新分成了两个流向,通过Binding.cs中的UpdateTargetFromSource和UpdateSourceFromTarget区分了两个数据流向,这样就可以避免数据会产生更新死循环

V和VM的绑定和更新部分在Binding.cs文件中实现
有如下几个关键的变量和函数

// VM=>V更新流向
protected virtual void UpdateTargetFromSource()
// V=>VM更新流向
protected virtual void UpdateSourceFromTarget()
//VM=>V更新流向
private bool isUpdatingTarget;
//V=>VM更新流向
private bool isUpdatingSource;

数据更新的入口分别是两个不同的类

//VM=>V 数据更新入口
UnityEventProxyBase
//V=>VM 数据更新入口
UnityPropertyProxy

想通过代码调试看具体的函数调用堆栈的建议在ObservableObject.cs中的RaisePropertyChanged函数下断点,如下图
这个地方无论是VM=>V还是V=>VM都会触发,同时在对UpdateTargetFromSource和UpdateSourceFromTarget两个函数下断点,基本就能搞清楚数据的更新流向
在这里插入图片描述
框架地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值