如何在JavaFx中的TableView中针对seleted项创建BooleanBinding

时间:2015-10-02 16:00:36

标签: javafx-8

我想做以下事情,但无法使其发挥作用。

我有一个包含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中选择了另一个项目。

感谢。

2 个答案:

答案 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());