我将JavaFX表定义为:
TableView<Person> table = new TableView<>;
//Person Class contains firstName,lastName & email properties
//table has three columns First Name, Last Name & Email
ObservableList
的{{1}}
Person
后台服务,其任务是通过向ObservableList<Person> persons = FXCollections.observableArrayList();
添加条目(Person
对象)来动态填充表。
表绑定为:
ObservableList persons
一切都很好......但我最近发现,如果我通过
清除表格项目table.itemsProperty().bind(service.valueProperty());
它不仅清除了表格,还清除了table.getItems().clear();
。我想知道这是否是双向绑定?
即使我在调用表ObservableList persons
之前取消绑定它,它也会产生相同的结果。
有人可以解释一下我没有得到什么意思吗?
答案 0 :(得分:4)
当你设置TableView
的{{3}}时,你实际做的是设置存储在属性中的引用(指针),指向指定的ObservableList
,而不是制作指定列表的精确副本。
因此,当您调用itemsProperty
时,它会返回对指定列表的引用。
因此,如果您在此列表中致电clear()
,则会清除原始ObservableList
。
注意:强>
在大多数情况下,您尝试过的绑定不是必需的:
table.itemsProperty().bind(service.valueProperty());
只需将itemsProperty
设置为
table.setItems(service.valueProperty().get());
只有在计划存储在valueProperty
中的引用将在运行时指向另一个列表时,才需要绑定。在大多数情况下,表格可以获得有关列表更改的通知。