Например, я хочу сделать это: у меня есть StringProperty, и это комбинация IntegerProperty и anoter StringProperty, например:
Как я могу «привязать» свойства так, чтобы 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
.