当前位置: 首页 > article >正文

QFramework v1.0 使用指南 更新篇:20240918. 新增 BindableList

20240918. 新增 BindableList

BindableProperty 很好用,但是不支持 List 等集合。

而 Bindable List 功能群友呼吁了很久了。

应群友要求,笔者实现了 Bindable List。

基本使用方式如下:

using System;
using UnityEngine;
using UnityEngine.UI;

namespace QFramework.Example
{
    public class BindableListExample : MonoBehaviour
    {

        private BindableList<string> mNameList = new BindableList<string>();

        public Text NameTextTemplate;
        public Transform ContentRoot;

        private void Start()
        {
            NameTextTemplate.Hide();
            
            mNameList.OnCountChanged.Register(count =>
            {
                print("count:" + count);
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mNameList.OnAdd.Register((index, newName) =>
            {
                print("add:" + index + "," + newName);

                NameTextTemplate.InstantiateWithParent(ContentRoot)
                    .SiblingIndex(index)
                    .Show()
                    .text = newName;
                
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mNameList.OnMove.Register((oldIndex, newIndex, nameItem) =>
            {
                print("move:" + oldIndex + "," + newIndex + "," + nameItem);

                ContentRoot.GetChild(oldIndex).SiblingIndex(newIndex);

            }).UnRegisterWhenGameObjectDestroyed(gameObject);
            
            mNameList.OnRemove.Register((index, nameItem) =>
            {
                print("remove:" + index + "," + nameItem);
                
                ContentRoot.GetChild(index).DestroyGameObjGracefully();
                
            }).UnRegisterWhenGameObjectDestroyed(gameObject);
            
            mNameList.OnReplace.Register((index,oldName, newName) =>
            {
                print("replace:" + index + "," + oldName + "," + newName);

                ContentRoot.GetChild(index).GetComponent<Text>().text = newName;
            }).UnRegisterWhenGameObjectDestroyed(gameObject);

            mNameList.OnClear.Register(() =>
            {
                print("clear");
                ContentRoot.DestroyChildren();
                
            }).UnRegisterWhenGameObjectDestroyed(gameObject);
        }

        private string mNameToRemove = null;
        private void OnGUI()
        {
            IMGUIHelper.SetDesignResolution(640,360);
            GUILayout.Label("count:" + mNameList.Count);
            GUILayout.BeginVertical("box");
            
            foreach (var nameItem in mNameList)
            {
                GUILayout.BeginHorizontal("box");
                GUILayout.Label(nameItem);
                if (GUILayout.Button("-"))
                {
                    mNameToRemove = nameItem;
                }
                

                GUILayout.EndHorizontal();
            }

            if (mNameToRemove.IsNotNullAndEmpty())
            {
                mNameList.Remove(mNameToRemove);
                mNameToRemove = null;
            }

            GUILayout.EndVertical();
            if (GUILayout.Button("add"))
            {
                mNameList.Add("liangxie" + UnityEngine.Random.Range(0,100));
            }

            if (mNameList.Count > 0)
            {
                if (GUILayout.Button("remove at 0"))
                {
                    mNameList.RemoveAt(0);
                }

                if (GUILayout.Button("replace at 0"))
                {
                    mNameList[0] = "replaced name" + UnityEngine.Random.Range(0, 100);
                }

                if (mNameList.Count > 1)
                {
                    if (GUILayout.Button("move 0 -> 1"))
                    {
                        mNameList.Move(0, 1);
                    }
                }

                if (GUILayout.Button("clear"))
                {
                    mNameList.Clear();
                }
            }
        }
    }
}

运行结果如下:

bindable_list

本文由 《QFramework 教程年会员》赞助,298 元,9 套教程一年内随便看。


http://www.kler.cn/news/311859.html

相关文章:

  • 利用反射实现动态代理
  • qiankun沙箱实现原理
  • linux之网络命令
  • 移动开发(三):使用.NET MAUI打包第一个安卓APK完整过程
  • .NET内网实战:通过命令行解密Web.config
  • 一文了解高速工业相机
  • ant vue3 datePicker默认显示英文
  • Spring Boot中配置图片资源通常涉及到静态资源的管理
  • 基于单片机的智能家居控制系统设计
  • python 爬虫 selenium 笔记
  • HarmonyOS开发实战(5.0)实现二楼上划进入首页效果详解
  • 典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
  • 大数据框架常用端口号总结
  • 局域网视频
  • 【机器学习】经典数据集鸢尾花的分类识别
  • vue2.0+ts注册全局函数和几个递归查找
  • 前端vue-关于标签切换的实现
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24
  • 基于CNN的10种物体识别项目
  • Spark-ShuffleWriter-UnsafeShuffleWriter
  • react是什么?
  • 数据结构、STL
  • 私域直播平台带源码
  • FRIDA-JSAPI:Java使用
  • leetcode:字符串中的第一个唯一字符
  • YOLOv10轻量化快速涨点之改进AKConv
  • Linux:vim编辑技巧
  • 【STL】priority_queue 基础,应用与操作
  • C++ 头文件 .h和.hpp的介绍与区别
  • 深度学习常见面试题及答案(11~15)