0

背景: view に単一のテーブルの複数のフラグメントがあり、それぞれに rowExpander があるとします

予想される動作:
1 つのテーブル フラグメントで行を展開すると、他のフラグメントの同じインデックス付きの行が展開されるはずです。崩壊も同じ

私の進捗状況:
サンプルフラグメント:

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()

「サブスクライブ」から私が理解しているのは、イベントが発生したときに呼び出されるということです (現在、ユーザーがダブルクリック/プラス記号をクリックして行を展開するたびにイベントを発生させています)。サブスクライブはテーブルビュー内に配置されるため、存在するすべてのテーブルフラグメントに対して呼び出されます(これが必要です)。しかし、subscribe メソッドでは、対応するインデックス行のみを選択する selectionModel.select(event.index) を実行しています。行を拡張したい (できれば selectionModel を使用して)

質問 2:
プラス記号の列を削除することは可能ですか? rowExpand の場合、expandOnDoubleClick を true に設定した場合、テーブルビューにプラス記号の列は必要ありません。

4

1 に答える 1

2

ビルダーは、基本的に通常rowExpanderの実際の値を返します。後で操作できるように、エキスパンダーへの参照を保存します。ExpanderColumnTableColumn

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

すぐ下で、エキスパンダー列を非表示にできるようになりました。

expander.isVisible = false

イベント サブスクライバーからも特定の行の展開状態を簡単に切り替えることができるようになりました。

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

イベントを発生させたテーブルビューのエキスパンダーを切り替えていないことを再確認したい場合があるため、イベントにイベントソースを含め、サブスクライバーでそれを区別することを検討してください。

目に見えるブール値パラメーターをrowExpanderビルダー関数に追加できるかどうかを調査して、isVisible手動で呼び出す必要がないようにします:)

于 2016-12-26T10:15:42.697 に答える