tornadofx EventBus使用tableview对象展开表格行
背景:
假设我在一个视图中有一个表的多个片段 ,每个都有一个rowExpander。
预期的行为:
如果在一个表格片段中我展开一行,其他片段相同的索引行应该展开。 相同的崩溃
我的进度:
样品片段:
tableview(dataset) { column("First Name", Person::firstNameProperty) column("Last Name", Person::lastNameProperty) rowExpander(true) { selectedData.item?.apply { fire(ExpandDataEvent(dataset.indexOf(this))) } column("Mobile Nos.", Person::mobileNumProperty) column("Email Ids", Person::emailIdProperty) } bindSelected(selectedData) subscribe<ExpandDataEvent> { event -> selectionModel.select(event.index) } }
活动分类:
class ExpandDataEvent(val index: Int) : FXEvent()
我从“订阅”中得到的理解是,当事件被触发时,它会被调用(当用户通过双击/单击加号扩展行时,我正在触发事件)。 并且由于订阅被放置在tableview中,所以它被调用来存在所有的表格片段(这是我想要的)。 但在订阅方法中,我正在做一个selectionModel.select(event.index),它只选择相应的索引行。 我想扩大行(最好通过使用selectionModel)
问题2:
是否可以删除加号列? 对于rowExpand,如果我已经将expandOnDoubleClick设置为true,我不希望我的tableview中的加号列。
rowExpander
构建器返回实际的ExpanderColumn
,它基本上是一个普通的TableColumn
。 保存对扩展器的引用,以便稍后对其进行操作:
val expander = rowExpander(true) { ... }
正下方,您现在可以隐藏扩展器列:
expander.isVisible = false
现在很容易从事件订阅者切换特定行的展开状态:
subscribe<ExpandDataEvent> { event -> expander.toggleExpanded(event.index) selectionModel.select(event.index) }
您可能需要仔细检查是否没有为触发事件的tableview切换扩展器,因此请考虑在事件中包含事件源,并在订阅服务器上进行区分。
我将调查如果我们可以添加一个可见的布尔参数的rowExpander生成器功能,所以你不需要手动调用isVisible
🙂