void InitTileSet(VisualElement root) { tileNameField = root.Query <TextField>("tile-name-field").First(); onlyCrossToggle = root.Query <Toggle>("only-cross-toggle").First(); tilesListView = root.Query <ListView>("tiles-list-view").First(); addTilesButton = root.Query <Button>("add-tile-button").First(); removeTileButton = root.Query <Button>("remove-tile-button").First(); tileNameField.BindProperty(serializedObject.FindProperty("tileName")); onlyCrossToggle.BindProperty(serializedObject.FindProperty("onlyCross")); var serializedTileSetElements = serializedObject.FindProperty("tileSetElements"); tilesListView.makeItem += () => new PropertyField(); tilesListView.bindItem = (e, i) => { if (i >= serializedTileSetElements.arraySize) { return; } (e as PropertyField).BindProperty(serializedTileSetElements.GetArrayElementAtIndex(i)); }; tilesListView.BindProperty(serializedTileSetElements); addTilesButton.clickable.clicked += () => tileSet.AddEmpty(); removeTileButton.clickable.clicked += () => tileSet.RemoveAt(tilesListView.selectedIndex); }