1

我有一个域类

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 */
}

saleableItemssoldAwaitingItems从内部更新Trades

我想显示saleableItemsusingTableView以便我可以绑定数据和 View 而无需将属性转换为 TornadoFX 属性所以我包装UserItemItemViewModel

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

有什么办法可以TradesItemViewModel<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)
    }
}
4

1 回答 1

1

你有没有尝试过这样的事情?

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或执行属性绑定。

于 2017-07-23T14:32:00.803 回答