private void CreateEnemyListView() { FindAllEnemy(out MonsterData[] enemies); ListView enemyList = rootVisualElement.Query <ListView>("enemy-list").First(); enemyList.makeItem = () => new Label(); enemyList.bindItem = (element, i) => (element as Label).text = enemies[i].name; enemyList.itemsSource = enemies; enemyList.itemHeight = 16; enemyList.selectionType = SelectionType.Single; enemyList.onSelectionChanged += (enumerable) => { foreach (Object item in enumerable) { Box enemyInfoBox = rootVisualElement.Query <Box>("enemy-info").First(); enemyInfoBox.Clear(); MonsterData enemy = item as MonsterData; SerializedObject serializedEnemy = new SerializedObject(enemy); SerializedProperty enemyProperty = serializedEnemy.GetIterator(); enemyProperty.Next(true); while (enemyProperty.NextVisible(false)) { PropertyField prop = new PropertyField(enemyProperty); prop.SetEnabled(enemyProperty.name != "n_Script"); prop.Bind(serializedEnemy); enemyInfoBox.Add(prop); if (enemyProperty.name == "monsterStats" && enemyProperty.objectReferenceValue != null) { Stats stats = enemyProperty.objectReferenceValue as Stats; SerializedObject serializedStats = new SerializedObject(stats); SerializedProperty statsProperty = serializedStats.GetIterator(); statsProperty.Next(true); while (statsProperty.NextVisible(false)) { PropertyField propStats = new PropertyField(statsProperty); propStats.SetEnabled(statsProperty.name != "n_Script"); propStats.Bind(serializedStats); enemyInfoBox.Add(propStats); } } if (enemyProperty.name == "enemyImage") { prop.RegisterCallback <ChangeEvent <Object> >((changeEvent) => LoadEnemyImage(enemy.Sprite().texture)); } } LoadEnemyImage(enemy.Sprite().texture); } }; enemyList.Refresh(); }