Обработка вложенных свойств в JavaFX / TornadoFX - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу, чтобы у меня было окно с информацией о некоторых ViewModel

Предположим, у вас есть простое лицо:

class Person(name: String) {
    val nameProperty = SimpleStringProperty(name)
}

и экземпляр Person, сохраненный в свойстве:

val personProperty = SimpleObjectProperty(Person("John"))

Какое правильное решение для отображения имени человека в ярлыке?

Использование этого:

label(personProperty.value.nameProperty)

Не будет обновляться, когда я обновляю человека свойства:

personProperty.value = Person("Joe")

(Это очевидно, потому что меняется только ссылка, а не само значение)

Так есть ли хороший способ сделать это или мне нужно вручную добавить прослушиватели для personProperty и обновитьна какую Person метка указывает?

РЕДАКТИРОВАТЬ: Я также нашел этот вопрос: JavaFX привязка и изменение свойства , но он не содержит ничего нового и полезного, что я не сделалзнаете, есть ли какой-нибудь специфический для TornadoFX способ сделать это?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2019

Это именно то, что ItemViewModel делает для вас.Если вы хотите сделать привязку для свойства name, которое обновляется автоматически, за пределами ItemViewModel, вы можете использовать функцию TornadoFX select:

val nameProperty = personProperty.select { it.nameProperty }
0 голосов
/ 22 апреля 2019

Слушатель может быть легко присоединен к свойству:

personProperty.onChange {
    if (it != null) {
        nameLabel.textProperty().bind(it.nameProperty)
    }
}

Это, несомненно, может быть включено в некоторую функцию расширения, чтобы упростить задачу.

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