TornadoFX envuelve las classs de dominio en ItemViewModel

Tengo una class de dominio

class UserItem(var simpleItem: Item, var id: String, var status: String, var price: Int) { var upperLimit: Int = 0 var lowerLimit: Int = 0 /* methods here */ } 

y una class que almacena estos objects

 class Trades { val saleableItems: ArrayList<UserItem> = ArrayList() val soldAwaitingItems: ArrayList<UserItem> = ArrayList() /* methods */ } 

saleableItems y soldAwaitingItems se actualizan desde dentro de Trades

Quiero mostrar artículos saleableItems usando TableView para poder enlazar datos y vistas sin convertir properties a properties TornadoFX, así que envolví UserItem a ItemViewModel

 class UserItemModel(uItem: UserItem) : ItemViewModel<UserItem>() { val simpleItem = bind { item?.observable(UserItem::simpleItem) } val id = bind { item?.observable(UserItem::id) } val status = bind { item?.observable(UserItem::status) } val price = bind { item?.observable(UserItem::price) } val upperLimit = bind { item?.observable(UserItem::upperLimit) } val lowerLimit = bind { item?.observable(UserItem::lowerLimit) } init { item = uItem } } 

¿Hay alguna forma de ajustar Trades a ItemViewModel<Trades> para que tenga algo así como

 class TradesModel : ItemViewModel<Trades>() { val saleableItems: ObservableList<UserItemModel> val soldAwaitingItems: ObservableList<UserItemModel> } 

y luego usarlo en View

 class TradesView : View("My View") { val tradesModel: TradesModel by inject() tableview(tradesModel.saleableItems) { column("Name", UserItemModel::simpleItem) column("Price", UserItemModel::price) column("Lower limit", UserItemModel::lowerLimit) column("Upper limit", UserItemModel::upperLimit) } } 

¿Has intentado algo como ésto?

 class UserItemModel(uItem: UserItem) : ItemViewModel<UserItem>() { // Same way you defined previously. } class TradesViewModel { val saleableItems: SimpleListProperty<UserItemModel>(FXCollections.observableArrayList()) val soldAwaitingItems: SimpleListProperty<UserItemModel>(FXCollections.observableArrayList()) } class TradesView : View("My View") { val tradesModel: TradesViewModel by inject() init { with(root) { tableview(tradesModel.saleableItems) { column("Name", UserItemModel::simpleItem) column("Price", UserItemModel::price) column("Lower limit", UserItemModel::lowerLimit) column("Upper limit", UserItemModel::upperLimit) } } } } 

Además, si su tabla es de solo lectura, es posible que pueda definir UserItemModel como una class de datos simple; no es necesario extender ItemViewModel ni realizar enlaces de properties.

  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • ¿Cómo puedo refactorizar una vista para permitir el filtrado de elementos vinculados a un observable ArrayList dentro de una aplicación tornadofx?
  • TornadoFX con TestFX cierra la vista después de cada TestCase
  • La compilation de Gradle no puede encontrar tornadofx en Linux
  • Cómo mostrar datos usando la vista de tree de TornadoFX
  • En TornadoFX, ¿cómo puedo hacer que una propiedad cambie cuando cambian otras properties?
  • TornadoFX: el text de la label no se actualiza
  • ¿Cuál es la mejor práctica para crear un componente de IU personalizado en tornadofx?
  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Crea una vista arbitraria
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia