2016-12-26 43 views
0

背景:
假設我有單個表的多個片段在視圖中,每個片段都有一個rowExpander。tornadofx EventBus使用tableview對象展開表格行

預期行爲:
如果在一個表格片段中展開一行,其他片段的相同索引行應該展開。同爲崩潰

我的進展情況:
樣品片段:

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中的加號列。

回答

2

rowExpander構建器返回實際的ExpanderColumn,這基本上是一個正常的TableColumn。保存到擴展的引用,以便您可以在以後操作:

val expander = rowExpander(true) { ... } 

正下方,你現在可以隱藏擴展列:

expander.isVisible = false 

現在可以很容易地切換的擴張狀態從事件的用戶特定的行,以及:

subscribe<ExpandDataEvent> { event -> 
    expander.toggleExpanded(event.index) 
    selectionModel.select(event.index) 
} 

您可能要仔細檢查你不切換爲觸發事件的實現代碼如下擴張,所以考慮包括連t來源並在用戶身上進行區分。

我會進行調查,如果我們可以添加一個可見的布爾參數的rowExpander設計器功能,因此您不必手動調用isVisible :)

+0

啊很容易!我正在嘗試同樣的事情,但發送擴展器對象作爲火災事件中的參數;並始終獲得相同的實例。謝謝:) – mercy123

+0

偉大的:)我會確保在指南中提及這種使用模式。 –