【Unity】 HTFramework框架(三十九)UI的数据驱动模式,MVVM
更新日期:2020年10月24日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]
索引
- UI的数据驱动模式
- 使用
- 数据模型
- BindableType可绑定数据类型
- IDataDriver数据驱动器
- DataBinding双向绑定
- BindableSelectable特殊数据类型
UI的数据驱动模式
MVVM的基础特性是数据绑定,也可以在某种程度上称之为数据驱动,在最新版本中,框架的UI模块(当然还有实体模块、公共行为类、FSM模块等)支持数据驱动模式
,所谓的数据驱动模式也即是UGUI控件
与数据模型
的双向绑定
(这里不考虑单向绑定)。
双向绑定后,支持如下特性:
- 在代码中任意位置更新
数据模型
的值,与其绑定的所有UGUI控件
会自动更新显示(支持多个控件绑定至同一个数据); - 在代码中或手动修改了
UGUI控件
的显示值,与其绑定的数据模型
值也会跟着同步更新。
使用
数据模型
1.新建数据模型:新建一个脚本,并继承至DataModelBase
:
/// <summary>/// UI数据驱动测试模型/// </summary>public class UIDBUserModel : DataModelBase{}
2.填入数据:在数据模型中最好使用可绑定数据
,好处是可以与UI控件进行绑定:
/// <summary>/// UI数据驱动测试模型/// </summary>public class UIDBUserModel : DataModelBase{/// <summary>/// 姓名/// </summary>public BindableString Name = new BindableString();/// <summary>/// 年龄/// </summary>public BindableInt Age = new BindableInt();/// <summary>/// 力量/// </summary>public BindableFloat Power = new BindableFloat();/// <summary>/// 是否是神级角色/// </summary>public BindableBool IsGod = new BindableBool();/// <summary>/// 种族/// </summary>public BindableSelectable Race = new BindableSelectable(new string[] { "人族", "魔族", "神族", "龙族" });}
3.在环境中加载数据模型:在Main检视面板上的DataModel
分栏,将刚才创建的数据模型加载进去,这样才能确保当前环境中存在该数据模型,且其在整个环境中是唯一
的:
BindableType可绑定数据类型
在数据模型UIDBUserModel
中,必须要使用可绑定数据类型
来定义数据字段,才能绑定到相应的控件,比如我要定义一个string
类型的数据,就必须使用对应的可绑定数据类型BindableString
:
/// <summary>/// UI数据驱动测试模型/// </summary>public class UIDBUserModel : DataModelBase{/// <summary>/// 姓名/// </summary>public BindableString Name = new BindableString();}
常用的基础类型均有与其对应的可绑定类型,当然也支持自定义可绑定类型
。
IDataDriver数据驱动器
将任何一个普通的UI逻辑类转变为数据驱动模式,只需要使其实现接口IDataDriver
就可以了:
/// <summary>/// 数据驱动测试UI,实现接口IDataDriver后,此UI便成为数据驱动器/// </summary>public class UIDBTestPanel : UILogicResident, IDataDriver{//注意:必须启用自动化任务protected override bool IsAutomate => true;//other code......}
DataBinding双向绑定
然后便可以直接将指定的UGUI控件
绑定至数据模型
(支持多个控件绑定同一个数据),使用DataBinding
特性标记即可,比如此处将_inputFieldName
和_textName
绑定至数据Name
:
public class UIDBTestPanel : UILogicResident, IDataDriver{[DataBinding("HT.Framework.Demo.UIDBUserModel", "Name")] private InputField _inputFieldName;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Name")] private Text _textName;}
绑定完成后数据Name
的值将始终与控件_inputFieldName
和_textName
的显示值保持同步:
- 在代码中修改了
Name
的值后,UI界面会实时更新; - UI界面更改了数据值后,
Name
的值也会实时同步。
定义更多的绑定控件:
public class UIDBTestPanel : UILogicResident, IDataDriver{[DataBinding("HT.Framework.Demo.UIDBUserModel", "Name")] private InputField _inputFieldName;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Name")] private Text _textName;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Age")] private InputField _inputFieldAge;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Age")] private Text _textAge;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Power")] private Slider _sliderPower;[DataBinding("HT.Framework.Demo.UIDBUserModel", "Power")] private Text _textPower;[DataBinding("HT.Framework.Demo.UIDBUserModel", "IsGod")] private Toggle _toggleIsGod;[DataBinding("HT.Framework.Demo.UIDBUserModel", "IsGod")] private Button _buttonIsGod;}
UI界面如下,直接在界面上修改UI控件,便可以修改对应的数据值:
BindableSelectable特殊数据类型
BindableSelectable
为可选数据类型,支持传入多个可选值,然后数据的真实值为多个可选值之一,此数据模型可以与DropDown
控件进行绑定:
public class UIDBTestPanel : UILogicResident, IDataDriver{[DataBinding("HT.Framework.Demo.UIDBUserModel", "Race")] private Dropdown _dropdownRace;}public class UIDBUserModel : DataModelBase{/// <summary>/// 种族/// </summary>public BindableSelectable Race = new BindableSelectable(new string[] { "人族", "魔族", "神族", "龙族" }, 2);}
UI界面如下:
【Unity】 HTFramework框架(三十九)UI的数据驱动模式,MVVM相关推荐
- 【Unity】 HTFramework框架(十九)ILHotfix热更新模块
更新日期:2019年9月27日. Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 ILHotfix热更新模块简介 使用ILHotfix热更新 创建ILHotfix环境 创建 ...
- Unity SKFramework框架(十九)、POI 兴趣点/信息点
目录 一.简介 二.使用说明 1.二维与三维的匹配 2.移除 3.UI分辨率 4.Camera相机 三.Example 示例 一.简介 POI可以理解为场景中的一些有意义的点,例如车站.商场.医院.监 ...
- 【js学习笔记三十九】简单工厂模式
目录 前言 导语 代码部分 总结 前言 我是歌谣 我有个兄弟 巅峰的时候排名c站总榜19 叫前端小歌谣 曾经我花了三年的时间创作了他 现在我要用五年的时间超越他 今天又是接近兄弟的一天人生难免坎坷 大 ...
- PyTorch框架学习十九——模型加载与保存
PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...
- WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形
原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...
- [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 【正点原子MP157连载】第三十九章 LCD驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- NeHe OpenGL第三十九课:物理模拟
NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切. 物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...
- Python编程基础:第三十九节 面向对象编程Object Oriented Programming
第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...
- javaweb学习总结(三十九)——数据库连接池
javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10 ...
最新文章
- windows mobile设置插移动卡没反应_ipad pro外接移动硬盘ipados
- 从C语言的角度重构数据结构系列(十二)-C语言判断语法详解(ifswitch)
- [BLE--Link Layer]物理信道
- java窗体添加背景图片_Java项目实战之实战之天天酷跑(四):游戏主界面
- 电子病历模板_年会献礼3:浮针专家平台病历撰写系统年会启动
- 传智168期JavaEE struts2杜宏 day32~day33(2017年2月15日23:27:09)
- 计算机维修案例分析题,14-15年春季高考信息技术题(组装维修部分)
- php制作学生卡片,PHP基础案例一:展示学生资料卡
- python 线性回归 统计检验 p值_PAST:最简便易用的统计学分析软件教程(一)软件基本信息介绍...
- 计蒜客挑战难题:简单斐波那契
- python可选参数和可变量参数_解析参数并构建值变量
- Yii2中Component和Object的使用方法
- 进程间通讯:实现基于多进程的文件拷贝
- 视频分辨率全表(101种)
- 安全优雅的RESTful API签名实现方案(手机端)
- 密歇根州立大学被黑 个人信息和社保号码被盗
- Firefly ROC-RK3328-PC 四核64位入门级Mini PC 官方教程矫正经验
- [74系列------74HC595]
- 盖茨将18亿美元股票转给梅琳达
- 腾讯云阿里云配置 mysql开放3306端口