datagridview 绑定list 不能刷新界面_UFlux篇(2):Props,Component和值绑定

本文介绍如何在Unity3D的BDFramework中使用datagridview绑定list并实现界面刷新,详细讲解了State和Props、Component以及值绑定的概念,并通过实例演示了组件值绑定的实现过程,包括添加、删除元素的操作。
摘要由CSDN通过智能技术生成

d1519c615f1bf69ac53736cad9495dd6.png

本系列基于:BDFramework 、Unity3D 2018.4.0

BDFramework:Simple! Easy! Beautiful! This is a powerful Unity3d game workflow!

框架地址:

GayHub: yimengfan/BDFramework.Core,

码云 : yimengfan/BDFramework.Core,欢迎赏星。

第九艺术 、第十艺术讨论群 : 763141410

先回顾下我们框架的目标:
1.我们要减少拼图仔的工作量,减少他操作各种ui加载,赋值,等琐碎的工作。把精力花在业务逻辑上
2.我们要帮助拼图仔快速debug
3.我们要在框架层进行设计约束,帮拼图仔合理的组织管理逻辑…
4.减少每次ui迭代的修改成本,只需要变动少量配置或者渲染层即可…

本章节内容:

1. State和Props

2.自动赋值

3.组件值绑定(更新数据,组件数据自动更新)

0x001: State和Props

State:逻辑状态,我们说的状态管理是管得State.[现在这里不懂没关系]

Props:渲染状态,组件根据Props进行渲染。[这个必须懂]

我们先来看一个Props:

7b7c78bfd4b76ce4272180e982bd0608.png

fe33cb7b94819e592f9155348e917e74.png

喏,这就是一个props 和对应Tansform的结构 ~

我们看下props是怎么进行定义的,这里我们优先看下流程,不讨论细节实现,

细节再下一篇中再讲

1.【TransformPath】 节点信息,描述这个字段是哪个Transform
2.【ComponentValueBind】组件值绑定,Type:该节点上哪个组件,FieldName:给组件哪个属性赋值

好了,我们先缓一缓,我们要继续讲跟Props相关的Component。毕竟 Props只是渲染状态,Component才是需要渲染的..

0x010: Component

先看一个Component的结构

901fdc845bc9a9abf83d06742758a5aa.png

这就是一个最简单的Component:

首先看标签:

1.【Component】 这个标签描述 当前Component的Prefab路径,
当你new一个Component的时候,会根据这个加载具体的Prefab
2.【TransformPath】 节点信息,描述这个字段是哪个节点,如果是继承了UIBehavior的UI组件,还会进行一次自动赋值

再看继承:

1.Component<T> :所有的Component 必须继承Component
2. Props:当继承Component<T>的时候,必须有一个Props跟该Component进行绑定

这下你应该清楚了吧:

首先Props是每个Component<T>必须的渲染状态,用以做自动赋值用。

其次Props和Component <T>有很多标签,用以做值绑定。

0x011: 自动赋值

emmm,我们还要看一个例子,对刚才的Props进行改写

首先我们看看后面实现的效果

842c6c1e5e6e90649919577867f0e5c7.gif

这是个很简单的例子,只是为了演示怎么进行值绑定 和刷新。

看看代码:

2cfafda923ee9a5de1a1a02fd90c4059.png

很简单,我们是开了个协程,每隔2s进行一次赋值操作,所以我们才能看到蜡笔小新说骚话。

这里重点关注一点,我们怎么进行值刷新的。

d3328fc107bfc320d3b6065e0ee61f01.png

我们只是对this.Props 改变了属性,

然后this.SetProps(),提交属性,整个渲染界面就刷新了。

是不是很酷~

我们再回顾下,我们的Props怎么定义的,这样你是不是理解了~

001a904bff4a24d959a584583d07ce50.png

0x100:再探值绑定

有人说,刚才的例子过于简单了。那我们来个复杂的!

老规矩,先看效果:

cedeed3dc5dd72db9dd474e8983db1c0.gif

这个时候,又会有老哥说:这个我也能弄啊,一把梭多快。

这个时候我们再回想下本节的内容:值绑定自动赋值数据流

我们一切的组件,都是通过SetProps的方式进行更新渲染的 。

不多说,我们看下实现:

这里的实现稍微复杂了点,我们是一个组件,嵌套另一个组件。

所以我们有2个组件:1.Item 2.ScrollReact

先看Item:

e6218d54ce4799c490031903c2aa2a7d.png

2d9d701bdcf5c2e6dbcefa31d3a3de9b.png

老样子了吧,小case不用多说了吧,不过这个有2个需要注意

1.是我们Button的Action,也是可以当成数据进行赋值的哦

2.是这个Component基本就是个光杆司令,但是这个Component 构造的时候,会自动加载Prefab。

再看ScrollRect:

14a8b9cb50a9a64681e253dd99db6071.png

这里开始,就稍微复杂了点,有一个嵌套结构:

也就是ScrollRect的 Props中,有list<props_item>,这也描述我们当前有多少个item的数据。

当我们增减item的个数的时候,实际上 就是操作这个List。

再看渲染:

0a3f40070d56a750a17f35e1fb3b9f82.png

细心的朋友会发现,这个是个AWindows。实际上没得差啦 ,

Awindows 也是个Component,只不过继承AWindows后,我们可以进行其他的操作。

这个不在本节描述。

我们重点看AddItem这个函数:

f9f07a88b5b34e2bee33cba5d5d15877.png

看,我们其实 增加的时候,是new 一个 Props_Item002,

然后往当前Props的ContentList中添加即可。

14a8b9cb50a9a64681e253dd99db6071.png

看就是我们定义的这个Props类。

然后移除的时候就更简单了:

cfdf637d0e646abd9e0249ff06275d2c.png

移除末尾,SetProps之,爽歪歪。

小结一下,我们做了什么:

1.Component和Props 2.标签,使用标签可以绑定组件和值,也用作加载,也可以对组件赋值 3.SetProps(), 当我们希望修改一个界面值,只需要修改Props,即可。 再也不需要翻箱倒柜寻找各个节点了。 4.数据流,每次我们更新Props 并且提交,可以视为1次数据流更新。 5.然后我们可以统一管理维护Props,甚至于可以状态回溯,有些时候查Bug我们可以先查Props。 6.谨记Props只是渲染的状态,我们后面还要做状态管理,管理的是逻辑状态State.

好奇的朋友,可能已经会发现了,我们做值绑定用了大量的 ComponentValueBind

[ComponentValueBind(typeof(Text), nameof(Text.text))]//数据赋值对象
[ComponentValueBind(typeof(Image), nameof(Image.overrideSprite))]//数据赋值对象
[ComponentValueBind(typeof(Button), nameof(Button.onClick))]//数据赋值对象
[ComponentValueBind(typeof(DemoScrollRect), nameof(DemoScrollRect.Contents))]//数据赋值对象

此时,好奇的同学会问:

这个怎么实现的?

到底我们能用多少个组件?

每个属性都能自动绑定么?

我的自定义组件怎么办?

我们现在有的组件,需要大量更改么?

给你们提前透露下,其实ComponentValueBind就是个体力活,也不需要你动已经有的组件

这就要轮到,下一篇了说了,你们给的star越多,我更新的越快..

下回书:性感程序在线改代码,UGUI为之动容 自动值绑定.

UGUI组件,数据驱动化修改~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值