2017-02-07 1 views
1

Par exemple, je veux faire ceci: J'ai un StringProperty, et il est une combinaison d'un IntegerProperty et anoter StringProperty, comme ceci:Dans TornadoFX, comment puis-je modifier une propriété lorsque d'autres propriétés sont modifiées?

  • StringProperty A = "toto"
  • IntegerProperty B = 3
  • résultant StringProperty C = "foo 3"

Comment puis-je propriétés "bind" de sorte que la C change lorsque A ou B sont modifiés? (Notez que je ne veux pas réagir aux modifications apportées à C)

J'ai essayé d'utiliser la méthode stringBinding(), mais je ne vois pas comment cette méthode fonctionne exactement, et la documentation à ce sujet n'est pas claire.

Répondre

2

stringBinding est ce que vous voulez. Le premier argument deviendra this à l'intérieur du bloc de calcul, et si this est une valeur observable, il sera ajouté en tant que dépendance utilisée pour calculer quand la liaison de chaîne doit être réévaluée. Le reste des paramètres (seulement b ici) sont également ajoutés en tant que dépendances de réévaluation.

Si vous faites stringBinding(a, b) { "${a.value} ${b.value}" }, vous avez créé une liaison de chaînes qui sera mise à jour chaque fois que a ou b sera modifié. Depuis this est a dans l'exemple ci-dessus, vous pouvez également avoir écrit en stringBinding(a, b) { "${this.value} ${b.value}" } mais je ne pense pas que qui le rend plus clair :)

La raison pour laquelle nous avons décidé de faire est fait le premier élément this plus apparent par ce qui suit exemple:

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

ici vous n'avez pas besoin de faire référence à la items à nouveau pour se rendre à sa propriété size.

+0

Je pense que vous avez besoin de 'stringBinding (a, b) {" $ {a.get()} $ {b.get()} "}' ou 'stringBinding (a, b) {" $ (a. valeur) $ {b.value} "}'. Les propriétés de JavaFX montrent plus que leur valeur avec la valeur par défaut 'toString()'. –

+0

Merci Matthew, mettra à jour ma réponse :) –