tornadofx icon indicating copy to clipboard operation
tornadofx copied to clipboard

Advanced Data Controls Guide Clarification

Open codezan opened this issue 3 years ago • 1 comments

``I'm having trouble figuring out how ListView should work using the ListCellFragment described by the guide in the Advanced Data Controls chapter (https://edvin.gitbooks.io/tornadofx-guide/content/part2/Advanced_Data_Controls.html)

It creates the ListView like so:

listview(personlist) {
    cellFragment<PersonCellFragment>()
}

But then talks about the class PersonListFragment, not PersonCellFragment

Furthermore, in PersonListFragment, the data is bound to an intermediary of the Person model called PersonModel, which itself is explained in the chapter Editing Models and Validation (https://edvin.gitbooks.io/tornadofx-guide/content/part1/11_Editing_Models_and_Validation.html) but it does not have an empty constructor, so how is the binding shown in the example even possible?

class PersonListFragment : ListCellFragment<Person>() {
    val person = PersonModel().bindTo(this)
    ...

Why is this PersonModel even necessary? Can't the form elements bind to the Person instance itself, since the Model seems to be doing nothing but declaring new properties that are bound to the Person properties anyhow. What's the point of doing that?

codezan avatar Oct 30 '21 12:10 codezan

the documentation explains the motives behind Model.

ListCell ( ListCellFragment) is reused, and one instance can have different instances of Person. Therefore, you need to clear the data, states and bindings to Person.

But this mechanism is already implemented in Model. When changing person in PersonModel it will automatically update the bindings

SchweinchenFuntik avatar Nov 09 '21 18:11 SchweinchenFuntik