Ist es möglich, den nicht leeren Zustand einer ObservableList innerhalb einer ObjectProperty mit der Bindings API zu verbinden?

8

Ich habe eine Situation, in der ich ein BooleanProperty an den nicht-leeren Zustand eines ObservableList gebunden in ein ObjectProperty binden möchte.

Hier ist eine grundlegende Zusammenfassung des Verhaltens, nach dem ich suche:

%Vor%

Ich möchte die Builder in der Klasse Bindings verwenden, anstatt eine Kette von benutzerdefinierten Bindungen zu implementieren.

Die Bindings.select(...) -Methode macht theoretisch das, was ich will, außer dass es keine Bindings.selectObservableCollection(...) gibt und der Rückgabewert von der generischen select(...) und die Übergabe an Bindings.isEmpty(...) nicht funktioniert. Das heißt, das Ergebnis davon:

%Vor%

verursacht ein ClassCastException :

%Vor%

Ist dieser Anwendungsfall nur mit der Bindings API möglich?

Lösung

Basierend auf der Antwort von @fabian, hier ist die Lösung, die funktioniert:

%Vor%     
metasim 06.02.2014, 20:09
quelle

3 Antworten

5

Ich sehe keine Möglichkeit, dies nur mit der Bindungs-API zu tun. ObservableList hat keine Eigenschaft leer, daher können Sie

nicht verwenden %Vor%

und

%Vor%

funktioniert nicht, da es nur aktualisiert wird, wenn sich die Liste ändert, aber nicht, wenn sich der Inhalt ändert (d. h. die dritte Assertion schlägt fehl).

Aber die benutzerdefinierte Kette von Bindungen, die Sie erstellen müssen, ist sehr einfach:

%Vor%     
fabian 07.02.2014, 13:08
quelle
1

Es könnte mit weniger Variablen gemacht werden:

%Vor%     
Sébastien B. 10.11.2016 08:26
quelle
0

Muss wirklich ein ObjectProperty<ObservableList<String>> sein? Wenn ja, löst diese Antwort Ihr Problem nicht ...

Aber ich denke, wenn du den Typ von obp so änderst:

%Vor%

Sie können Folgendes verwenden:

%Vor%     
haraldK 07.02.2014 12:58
quelle