Ваш Binding
не будет признан недействительным, поскольку ваш код ожидает изменения свойства SelectionModel
, а не выбранных элементов:
Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.selectionModelProperty());
Это можно исправить, изменив зависимости привязки :
Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.getSelectionModel().getSelectedItems());
Примечание: Если вы измените модель выбора дерева с помощью treeView.setSelectionModel(...)
где-нибудь еще в вашем коде, вам придется снова привязать свойство disable
. Если это обычное явление в вашем коде, вы можете добавить зависимость к модели выбора, чтобы код выглядел следующим образом:
Bindings.createBooleanBinding(() -> {...}, treeView.selectionModelProperty(), treeView.getSelectionModel().getSelectedItems());
Это означает, что пересчитывайте значение всякий раз, когда изменяется модель выбора или выбранные элементы. .