TableView selectedItem diikat ke ViewModel dan saya ingin tombol dinonaktifkan ketika selectedItem null dan diaktifkan sebaliknya.

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?
        }
      }
    }
  }
}

Saya membayangkan bahwa saya harus membuat OvservableValue<Boolean> dan kemudian meneruskan ke enableWhen tetapi, bagaimana melakukannya?

Apakah mungkin untuk memetakan properti onChange ke observable khusus? (hanya ide lain)

1
Victor Aurélio 15 November 2017, 07:35

1 menjawab

Jawaban Terbaik

Nilai yang dapat diamati memiliki fungsi yang akan mengembalikan BooleanBinding bila tidak mengandung nilai, dan karena Anda telah mengikat item yang dipilih ke model.selectedSubtitle, Anda cukup menambahkan ekspresi berikut di dalam pembuat tombol:

enableWhen(model.selectedSubtitle.isNotNull)

Jika Anda tidak mengikat item yang dipilih dari TableView ke properti yang dapat diakses dalam tampilan, Anda bisa menyimpan referensi ke tabel secara langsung dan mengikat ke status dalam model pemilihan tabel:

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

Pada catatan lain, Anda dapat membersihkan sintaks Anda dengan menyingkirkan blok init dan mendeklarasikan node root secara langsung dengan builder:

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

Semoga ini membantu :)

3
Edvin Syse 15 November 2017, 08:21