我想做以下事情,但无法使其发挥作用。
我有一个包含MyCustomDTO对象的表,它有几个属性。当属性foo是特定类型时,我想禁用一个动作。
我尝试像这样创建一个BooleanBinding:
BooleanBinding booleanBinding = Bindings.createBooleanBinding(()->{
boolean disableChangeType = false;
MyCustomDTO dto = myTable.getSelectionModel().getSelectedItem();
if(dto == null || dto.getFoo().equals("VALUE")){
disableChangeType = true;
}
return disableChangeType;
});
我尝试将其作为字段和局部变量,但没有任何效果。
changeButton.disableProperty().bind(Bindings.isEmpty(list).or(booleanBinding ));
这可以作为绑定吗?这个绑定似乎只评估一次,然后保持在该值,即使我在tableview中选择了另一个项目。
感谢。
答案 0 :(得分:4)
如果告诉它要观察哪个可观察对象的变化,你的布尔绑定将起作用:
BooleanBinding booleanBinding = Bindings.createBooleanBinding(()->{
boolean disableChangeType = false;
MyCustomDTO dto = myTable.getSelectionModel().getSelectedItem();
if(dto == null || dto.getFoo().equals("VALUE")){
disableChangeType = true;
}
return disableChangeType;
}, myTable.getSelectionModel().selectedItemProperty());
答案 1 :(得分:-1)
我能够通过做两件事来完成这项工作:
1)使绑定成为字段级别
2)在所选属性上添加选择侦听器,并使绑定无效,如下所示
myTable.getSelectionModel().selectedItemProperty().addListener((obs, ov, nv)-> booleanBinding .invalidate());