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);
    }