是否可以将ListView的选择索引或项绑定(单向)到属性?
我可以使用此调用获取ReadOnlyIntegerProperty,但它是一个ReadOnlyProperty,它没有您在ObjectProperty
,StringProperty
等中看到的绑定方法。
myListView.getSelectionModel().selectedIndexProperty()
如何将Integer属性绑定到ListView的选定索引属性?
答案 0 :(得分:3)
API将selectedIndex
公开为ReadOnlyProperty
,因为它不希望公开属于bind
API的Property
方法。它不希望公开bind
方法的原因是ListView
需要能够在用户点击它时设置该属性。如果bind
方法是API的一部分,并且程序员调用listView.getSelectionModel().selectedIndexProperty().bind(...)
,则只要用户单击列表,就会生成运行时错误。
由于bindBidirectional
也是Property
API的一部分,而不是ReadOnlyProperty
API的一部分,这意味着您也无法双向绑定selectedIndex
。
使用两个侦听器可以实现与双向绑定相同的效果:
IntegerProperty property = new SimpleIntegerProperty();
ListView<?> listView = new ListView<?>();
// change property when selection changes:
listView.getSelectionModel().selectedIndexProperty().addListener((obs, oldIndex, newIndex) ->
property.set(newIndex.intValue()));
// change selection when property changes:
property.addListener((obs, oldValue, newValue) ->
listView.getSelectionModel().clearAndSelect(newValue.intValue()));
如果您只想将所选项索引绑定到属性,则只需要第二个侦听器。
如果您只想将属性绑定到选定的项索引,并且您不打算通过其他方式设置该属性,那么您当然可以绑定该属性:
IntegerProperty property = new SimpleIntegerProperty();
property.bind(listView.getSelectionModel().selectedIndexProperty());
(虽然在这种情况下,如果您的设计允许,您可以直接引用selectedIndexProperty
。)
答案 1 :(得分:1)
我可以阅读不允许biDirectionalBinding,因为它可以阅读 只是,但我怎么能单行绑定?
尝试:
for(int i = 0; i < 10; cout << array[i++]);