使用篇六,数据绑定

开始

前两篇,太简单了。这次我们来一个有难度,但是很好玩的------》数据绑定
什么是数据绑定?
举个生动例子
.
我是一个爱吃爱睡叫的人,怎么睡都喜欢,什么都爱吃
最近呢,出现了一个 A 某 ,他多我很关心
我睡觉落枕了                  他就告诉我怎么睡觉才不会落枕
我吃东西闹肚子了              他就告诉我应该吃什么,不应该吃什么

结束:我们可以发现,我出现对应的症状,A某就会出现对应的关心
	 这是一一对应的,就好像 A 某装了监视器一样
	 我发生某个行为,触发了 A 某的一个特定的行为
	 这种呢,就是单向绑定
	 
	 那么什么是双向绑定?
	 通俗的讲  我和 A 某 ,发生了互相关心,互相装监控器,并且触发行为
	 
	 好了,我们上马

上马

    public class BindTest : Test
    {

        class Binder_A:BindableObject
        {
            private string _value;

            public string value { get { return GetProperty(ref _value); } set { SetProperty(ref _value, value); } }
        }
        class Binder_B : BindableObject
        {
            private string _value;

            public string value { get { return GetProperty(ref _value); } set { SetProperty(ref _value, value); } }
        }


        private void Bind_Test()
        {

            Log.L("init  BindableObject Test");
            BindableObjectHandler binder = new BindableObjectHandler();
            Binder_A a = new Binder_A();
            Binder_B b = new Binder_B();
            Log.L($"a.value = {a.value}\tb.value= {b.value}");
            Log.L("bind");

            binder.BindProperty((value) => { a.value = value; }, () => { return a.value; })
                .BindProperty((value) => { b.value = value; }, () => { return b.value; });
            Log.L($"a.value = {a.value}\tb.value= {b.value}");
            Log.L("change value to a");
            a.value = "a";
            Log.L($"a.value = {a.value}\tb.value= {b.value}");


            Log.L("change value to b");
            b.value = "b";
            Log.L($"a.value = {a.value}\tb.value= {b.value}");
        }
        protected override void Start()
        {
            Log.L("Single direction");

            //单向
            Observable_Test();
            Log.L("---------------------------------------");

            Log.L("Double direction");

            //双向
            Bind_Test();
        }

        private void Observable_Test()
        {
            Log.L("init ObservableObject Test");
            ObservableObjectHandler binder = new ObservableObjectHandler();
            Observable_A a = new Observable_A();
            Log.L($"a.value = {a.value}");
            Log.L("bind");

            binder.BindProperty(
                                (value) => {
                                    a.value = value;
                                    Log.L($"listen change a.value to   {value }");
                                },
                                () => { return a.value; }
                        );

            Log.L($"a.value = {a.value}");

            Log.L("change value to a");
            a.value = "a";
            Log.L($"a.value = {a.value}");


            Log.L("change value to b");
            a.value = "b";
            Log.L($"a.value = {a.value}");
        }
        class Observable_A: ObservableObject
        {
            private string _value;

            public string value { get { return GetProperty(ref _value); } set { SetProperty(ref _value, value); } }
        }
        protected override void Stop()
        {
        }

        protected override void Update()
        {
        }
    }
来看看输出

在这里插入图片描述

结束

	看完代码和结果,是不是很有意思的?
	那怎么实现的呢?
	后续文章讲解,hey hey hey
	简单透露以下 ---》委托
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值