2017-05-07 15 views
0

私はいくつかのラベルとテキストフィールドでモデルのオブジェクトのプロパティをバインドしようとしています。JavaFx:双方向バインディング、TableViewで選択された値

label1.textProperty().bind(myModel.getSelectedObject().getNameProperty()); 

この場合getSelectedObject()は、TableViewで選択されたオブジェクトです。何とかこれは期待どおりに動作しません。モデルの値が変更されると、ラベルは変更されません。

私は Bindings助けクラスでこの問題を修正するためにmangaged:

label1.textProperty().bind(Bindings.select(myModel.getSelectedObject(), "name")); 

をのみ、ラベルのテキストは、オブジェクトの名前、プロパティに正しくバインドされますBindingsヘルプクラスで。

現在、双方向バインディングで同じ結果を得ようとしています。誰にでもアイデアはありますか?私はこのようにそれを結合する場合

、それはSelectionModelため

textField.textProperty().bindBidirectional(myModel.getSelectedObject().getNameProperty()); 

答えて

0

ChangeListener結合切り替えることが可能(最初のコード切り取らと同じ)効果がありません。やってみて。

tableView.getSelectionModel().selectedItemProperty().addListener((o, ov, nv) -> { 
    if (ov != null) textField.textProperty().unbindBidirectional(ov.nameProperty()); 
    if (nv != null) { 
     textField.setDisable(false); 
     textField.textProperty().bindBidirectional(nv.nameProperty()); 
    } else { 
     textField.setDisable(true); 
     textField.setText(""); 
    } 
}); 

注:選択された項目はTableViewのアイテムから削除され

場合、このChangeListneroldValueなくヌルとして除去アイテムと呼ばれます。したがって、リスト項目の削除を気にする必要はありません。

関連する問題