Version: 6000.3
语言: 中文
当任何绑定属性发生变化时接收回调
绑定到没有 ListView 的列表

使用 ListView 绑定到列表

版本: 2021.3+

ListView 控件是创建列表的最有效方法。若要使用 ListView 绑定到列表,请将 ListView 的绑定路径设置为包含列表的属性的名称。

此示例演示如何使用 ListView 绑定到列表。

示例概述

该示例创建了一个切换列表,并将该列表绑定到以下GameSwitch对象。

Unity 编辑器中显示的自定义开关列表。
Unity 编辑器中显示的自定义开关列表。

您可以在此 GitHub 存储库中找到此示例创建的已完成文件。

先决条件

本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容:

使用列表创建对象

创建一个GameSwitch对象和序列化对象,该对象的列表为GameSwitch对象作为属性。

  1. 使用任何模板创建 Unity 项目。

  2. 在您的项目窗口一个窗口,显示您的内容Assets文件夹(项目选项卡)更多信息
    术语表中查看
    ,创建一个名为bind-to-list以存储您的所有文件。

  3. 创建名为GameSwitch.cs并将其内容替换为以下内容:

    using System;
    
    [Serializable]
    public struct GameSwitch
    {
        public string name;
        public bool enabled;
    }
    
  4. 创建名为game_switch.uxml并将其内容替换为以下内容:

    <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
        <Box style="flex-direction: row;">
            <Toggle binding-path="enabled" />
            <TextField binding-path="name" readonly="true" style="flex-grow: 1;"/>
        </Box>
    </UXML>
    
  5. 创建名为GameSwitchListAsset.cs并将其内容替换为以下内容:

    using System.Collections.Generic;
    using UnityEngine;
    
    namespace UIToolkitExamples
    {
        [CreateAssetMenu(menuName = "UIToolkitExamples/GameSwitchList")]
        public class GameSwitchListAsset : ScriptableObject
        {
            public List<GameSwitch> switches;
    
            public void Reset()
            {
                switches = new()
                {
                    new() { name = "Use Local Server", enabled = false },
                    new() { name = "Show Debug Menu", enabled = false },
                    new() { name = "Show FPS Counter", enabled = true },
                };
            }
    
            public bool IsSwitchEnabled(string switchName) => switches.Find(s => s.name == switchName).enabled;
        }
    }
    

创建自定义编辑器并设置绑定

创建一个自定义编辑器,该编辑器可以创建具有切换列表的资产。将切换列表绑定到GameSwitch列表,方法是将binding-path属性设置为GameSwitch列表,即switches.

  1. 创建一个名为Editor.

  2. Editor 文件夹中,创建一个名为GameSwitchListEditor.cs并将其内容替换为以下内容:

    using UnityEditor;
    using UnityEngine;
    using UnityEngine.UIElements;
    
    namespace UIToolkitExamples
    {
        [CustomEditor(typeof(GameSwitchListAsset))]
        public class GameSwitchListEditor : Editor
        {
            [SerializeField]
            VisualTreeAsset m_ItemAsset;
    
            [SerializeField]
            VisualTreeAsset m_EditorAsset;
    
            public override VisualElement CreateInspectorGUI()
            {
                var root = m_EditorAsset.CloneTree();
                var listView = root.Q<ListView>();
                listView.makeItem = m_ItemAsset.CloneTree;
                return root;
            }
        }
    }
    
  3. 创建名为game_switch_list_editor.uxml并将其内容替换为以下内容:

    <UXML xmlns="UnityEngine.UIElements" xmlns:ue="UnityEditor.UIElements">
        <ListView virtualization-method="DynamicHeight"
                  reorder-mode="Animated"
                  binding-path="switches"
                  show-add-remove-footer="true"
                  show-border="true"
                  show-foldout-header="true"
                  header-title="Switches"
        />
    </UXML>
    
  4. 在“项目”窗口中,选择GameSwitchListEditor.cs

  5. game_switch.uxml 拖到 项目资产(Item Asset)检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
    请参阅术语表
    .

  6. game_switch_list_editor.uxml 拖到检查器中的编辑器资源中。

测试绑定

  1. 从菜单中,选择 资产(Assets) > 创建(Create) > UIToolkitExamples > GameSwitchList。这将创建一个名为 新游戏切换列表资产(New Game Switch List Asset) 的资产。
  2. 在 项目(Project) 窗口中,选择 新建游戏切换列表资源(New Game Switch List Asset) 。这显示了检查器中的切换列表。您可以重新排序列表、折叠列表、向列表中添加条目或从列表中删除条目,以及更改列表中的条目数。如果您在 Inspector UI 中进行更改,则switches属性的GameSwitchListAsset对象更改。

其他资源

当任何绑定属性发生变化时接收回调
绑定到没有 ListView 的列表