如何将属性的属性绑定到Tornado TableView中的列?

时间:2018-12-25 14:21:55

标签: kotlin tableview tornadofx

我试图将类的属性的属性绑定到TornadoFX TableView中的列。这只是让我绑定属性本身,它是类的实例。这显示了类的实例ID(model.Address@2fe90a0b),而不是我要显示的属性。有没有一种方法可以将属性的属性绑定到TableView中的列?

val people = mutableListOf<Person>().observable()

tableview(people) { 
    id="ResultTable"
    readonlyColumn("First Name",Person::firstName)
    readonlyColumn("Last Name",Person::lastName)
    readonlyColumn("Email Address",Person::email)
    readonlyColumn("Street", Person::address) // this property is a class
    columnResizePolicy = SmartResize.POLICY
    isEditable = true
}

我想将属性Address.street绑定到“街道”列

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,并且您有几种选择。一种是简单地覆盖列中显示的内容:

readonlyColumn("Street", Person::address).cellFormat {
    text = it.street
}

另一个是提供提取属性的功能。但是,由于您似乎选择不遵循最佳做法并在域对象中使用可观察的属性,因此您需要在返回String值时将其转换为可观察的属性:

column<Person, String>("Street") {
    SimpleStringProperty(it.value.address.street) 
}