2017-07-21 2 views
0

ich einen Domain-KlasseTornadoFX Verpackungs Domain-Klassen 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 */ 
} 

und eine Klasse zu speichern diese Objekte

class Trades { 
    val saleableItems: ArrayList<UserItem> = ArrayList() 
    val soldAwaitingItems: ArrayList<UserItem> = ArrayList() 

    /* methods */ 
} 

saleableItems und soldAwaitingItems aktualisiert werden aus Trades

Ich möchte angezeigt haben saleableItems mit TableView, so dass ich Daten und Ansicht ohne p binden konnte xtras zu TornadoFX Eigenschaften so wickelte ich UserItem zu 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 
    } 
} 

Gibt es eine Möglichkeit Trades-ItemViewModel<Trades> so zu verpacken, dass ich etwas wie

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

und es dann in 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) 
    } 
} 
verwenden

Antwort

1

Haben Sie so etwas probiert?

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

Auch wenn Ihre Tabelle nur-lesen ist, können Sie in der Lage sein UserItemModel als einfache Datenklasse zu definieren - keine Notwendigkeit für ItemViewModel Erweiterung oder Durchführung Eigenschaft Bindungen.

Verwandte Themen