[英]Disable Context Menu on a a child of a root JavaFX TreeView<Label> with TreeItem<Label>
此結構中帶有TreeItem<Label>
JavaFX 14 Treview
;
我已將ContextMenu
附加到根處的Label
以添加和刪除組。 當沒有組使用時,我可以禁用刪除組;
removeGroupMenuItem.disableProperty().bind(Bindings.isEmpty(treeView.getRoot().getChildren()));
但是,我現在已將ContextMenu
附加到允許添加子項或刪除所有子項的每個組的Label
。 我的問題是,如果選擇了一個或多個組,我如何禁用刪除所有子MenuItem
。
我試過哪個不起作用;
removeAllChildrenMenuItem.disableProperty().bind(Bindings.createBooleanBinding(() -> treeView.getSelectionModel().getSelectedItems().stream().flatMap(f -> f.getChildren().stream()).collect(Collectors.toList()).size() == 0, treeView.selectionModelProperty()));
歡迎任何想法!
您的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());
這意味着,只要選擇模型或所選項目發生變化,就重新計算該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.