Привязка данных ObservableMap к TreeView - PullRequest
0 голосов
/ 08 ноября 2019

Я только начинаю работать с TornadoFX, и я обнаружил, что документация немного скудная о том, как использовать ObservableMap для заполнения TreeView и динамического повторного рендеринга при изменении базовых данных.

Мое приложение позволяет пользователю перетаскивать файлы в целевую область. Они добавляются в наблюдаемый список, в который я создал ObjectBinding<Map<File, List<File>>>, который группирует их по родительскому каталогу. Я хочу отразить карту в TreeView как родительские / дочерние отношения каталогов и файлов.

Следующее будет работать, если files дано начальное значение, но оно не обновляет дерево для отражения изменений вэто:

class DrawableView : View("Drawables") {
    private var filesList: TreeView<File> by singleAssign()
    private val files = FXCollections.observableArrayList<File>()
    private val folders = Bindings.createObjectBinding(Callable {
        files.groupBy { File(it.parent) }
    }, files)

    override val root = vbox {
        filesList = treeview {
            root = TreeItem(File("All"))
            isShowRoot = false
​
            cellFormat { text = it.name }
​
            populate { node ->
                val item = node.value
                when {
                    node == root -> folders.value.keys
                    item is File -> folders.value[item]
                    else -> null
                }
            }
        }
    }
​
    ...
}

Любой совет? Это ожидаемый результат:

TreeView example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...