2017-07-21 1 views
0

私はドメインクラス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 */ 
} 

saleableItemssoldAwaitingItemsを保存するクラスは、私が表示したいTrades

内から更新されているにsaleableItemsTableViewを使用しているため、データをバインドし、pを変換せずに表示できますTornadoFXプロパティへのropertiesは、私は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 
    } 
} 

を包んだ私は

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

のようなものを持っているようItemViewModel<Trades>Tradesをラップして、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) 
    } 
} 
でそれを使用する方法はあります

答えて

1

あなたはこれを試しましたか?プロパティバインディングをItemViewModelを拡張するか、実行する必要はありません - あなたのテーブルが読み取り専用の場合

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を定義することができるかもしれません。

関連する問題