按钮启用时TableView selectedItem不为空

时间:2017-11-15 04:35:01

标签: tornadofx

TableView selectedItem绑定到 ViewModel ,我想在selectedItem null 时禁用按钮,否则启用。

class MainView: View("TheSubberKt") {
  override val root = Form()
  val model = MainViewModel()

  init {
    with(root) {
      fieldset {
        field("Media:") {
          textfield(model.mediaPath)
          button("...")
        }
      }
      tableview(subs) {
        // ...
        bindSelected(model.selectedSubtitle)
      }
      hbox {
        button("Hash Search")
        button("Download Selected") {
          // what to do here?
        }
      }
    }
  }
}

我想我必须创建一个OvservableValue<Boolean>,然后传递给enableWhen但是,该怎么做?

是否可以将属性onChange映射到自定义可观察对象? (只是另一个想法)

1 个答案:

答案 0 :(得分:3)

可观察值有一个函数,当它们不包含值时会返回BooleanBinding,并且由于您已经将所选项目绑定到model.selectedSubtitle,因此您可以简单地在按钮构建器中添加以下表达式:

enableWhen(model.selectedSubtitle.isNotNull)

如果您没有将TableView的选定项绑定到视图中可访问的属性,则可以直接存储对表的引用并绑定到表的选择模型中的状态:

enableWhen(table.selectionModel.selectedItemProperty().isNotNull)

另一方面,您可以通过删除init块来清理语法,并直接使用构建器声明根节点:

override val root = tableview(subs) {
   ...
}

希望这会有所帮助:)