В TornadoFX, как я могу изменить одно свойство при изменении других свойств?

Например, я хочу сделать это: у меня есть StringProperty, и это комбинация IntegerProperty и anoter StringProperty, например:

  • StringProperty A = "foo"
  • IntegerProperty B = 3
  • результат StringProperty C = "foo 3"

Как я могу «привязать» свойства так, чтобы C изменялся при изменении A или B? (Обратите внимание, что я не хочу реагировать на изменения, внесенные в C)

Я попытался использовать stringBinding() , но мне непонятно, как этот метод работает точно, и документация об этом неясна.

stringBinding – это то, что вы хотите. Первый аргумент станет this внутри блока вычислений, и если this наблюдаемое значение, оно будет добавлено как зависимость, используемая для вычисления, когда привязка строки должна быть переоценена. Остальные параметры (только здесь) добавляются также в зависимости от переоценки.

Если вы выполняете stringBinding(a, b) { "${a.value} ${b.value}" } , вы создали привязку строки, которая будет обновляться всякий раз, когда изменяется либо a либо b . Так как a в приведенном выше примере, вы также могли бы написать в stringBinding(a, b) { "${this.value} ${b.value}" } но я не думаю, что это делает его более ясным 🙂

Причина, по которой мы решили сделать первый элемент, стала более очевидной в следующем примере:

val sizeDescription = bind(items) { "$size elements in list" }

Здесь вам больше не нужно ссылаться на items чтобы получить свойство его size .

Intereting Posts
Не удалось запустить приложение Kotlin в Eclipse Google Assistant SDK отказывается от аутентифицированного канала как «НЕОПРЕДЕЛЕННЫЙ» Тест модуля Kotlin не обнаруживает интерфейс зависимостей модуля Android kotlin project build застрял в приложении: задача kaptDebugKotlin Вызов методов на интерфейсах с дженериками Ошибка компиляции Котлина: ни одна из следующих функций не может быть вызвана с предоставленными аргументами Конструкторы для типов с использованием обобщенных типов Room – запрос SELECT, получение или дефолт Как я могу разделить последовательность целых чисел на диапазоны (java \ kotlin) Ошибка вывода Kotlin и RxJava Используется плагин kotlin-spring, все еще получающий класс не открытую ошибку Повторная установка 2, Rx 2 и асинхронные вызовы База данных SQLite исчезла из эмулятора Android Как извлечь карту из коллекции объектов, с ключом как одним из объектов того же поля и значением фактических объектов Какова наиболее вероятная причина исключений, загадочно избегающих блока try-catch в этом случае?