TornadoFX将域类包装到ItemViewModel
我有一个域类
class UserItem(var simpleItem: Item, var id: String, var status: String, var price: Int) { var upperLimit: Int = 0 var lowerLimit: Int = 0 /* methods here */ }
和一个存储这些对象的类
class Trades { val saleableItems: ArrayList<UserItem> = ArrayList() val soldAwaitingItems: ArrayList<UserItem> = ArrayList() /* methods */ }
saleableItems
和soldAwaitingItems
从Trades
内更新
我想使用TableView
显示saleableItems
这样我就可以绑定数据和视图,而无需将属性转换为TornadoFX属性,因此我将UserItem
包装到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 } }
有没有什么办法把Trades
ItemViewModel<Trades>
这样我就有了类似的东西
class TradesModel : ItemViewModel<Trades>() { val saleableItems: ObservableList<UserItemModel> val soldAwaitingItems: ObservableList<UserItemModel> }
然后在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) } }
你有没有尝试过这样的事情?
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) } } } }
另外,如果你的表是只读的,你可能能够将UserItemModel
定义为一个简单的数据类 – 不需要扩展ItemViewModel
或执行属性绑定。