2017-02-07 2 views
1

Zum Beispiel möchte ich, dies zu tun: Ich habe eine String haben, und es ist eine Kombination aus einem IntegerProperty und anoter String, wie folgt aus:Wie kann ich in TornadoFX eine Eigenschaft ändern, wenn andere Eigenschaften geändert werden?

  • String A = "foo"
  • IntegerProperty B = 3
  • resultierende String C = "foo 3"

Wie kann ich "bind" -Eigenschaften, so dass der C verändert, wenn entweder A oder B geändert werden? (Ich möchte nicht auf Änderungen an C reagieren)

Ich versuchte mit stringBinding() Methode, aber es ist mir unklar, wie diese Methode genau funktioniert, und die Dokumentation darüber ist unklar.

Antwort

2

stringBinding ist was du willst. Das erste Argument wird innerhalb des Berechnungsblocks this und wenn this ein beobachtbarer Wert ist, wird es als eine Abhängigkeit hinzugefügt, die verwendet wird, um zu berechnen, wann die String-Bindung neu bewertet werden soll. Der Rest der Parameter (hier nur b) wird ebenfalls als Neuauswertungsabhängigkeiten hinzugefügt.

Wenn Sie stringBinding(a, b) { "${a.value} ${b.value}" } tun, haben Sie eine String-Bindung erstellt, die aktualisiert wird, wenn sich entweder a oder b ändert. Da thisa in dem obigen Beispiel, könnten Sie auch haben in stringBinding(a, b) { "${this.value} ${b.value}" } geschrieben, aber ich glaube nicht, das macht es noch klarer :)

Der Grund haben wir beschlossen, das erste Element zu machen this durch die folgenden deutlicher gemacht wird Beispiel:

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

Hier brauchen Sie nicht die items wieder zu referenzieren zu bekommen, um es size Eigenschaft ist.

+0

Ich denke, Sie brauchen entweder 'stringBinding (a, b) {"$ {a.get()} $ {b.get()}"} 'oder' stringBinding (a, b) {"$ (a. Wert) $ {b.value} "}'. JavaFX-Eigenschaften zeigen mehr als nur ihren Wert mit dem Standard 'toString()'. –

+0

Danke Matthew, werde meine Antwort aktualisieren :) –

Verwandte Themen