2016-05-17 5 views
0

Per this Link habe ich Kontextmenü auf meine Tableview mit dem folgenden Muster hinzugefügt -JavaFX Tableview Reihe contextmenu Bindungen

row.contextMenuProperty().bind(
     Bindings.when(Bindings.isNotNull(row.itemProperty())) 
     .then(rowMenu) 
     .otherwise((ContextMenu)null)); 

Ich habe eine Verpflichtung, wo die mehrere Zeilen ausgewählt werden können (SelectionMode.MULTIPLE) und ich muss Zeigen Sie das Kontextmenü an, wenn eine Zeileneigenschaft mit einem bestimmten Wert übereinstimmt. Ich habe dies aber kein Glück versucht -

// Show menu only if row is not null and value property == "foo" 
row.contextMenuProperty().bind(
     Bindings.when(Bindings.and(Bindings.isNotNull(row.itemProperty()), Bindings.equal("foo", row.getItem().value)) 
     .then(rowMenu) 
     .otherwise((ContextMenu)null)); 

UPDATE

Ich habe dies über einen Zuhörer arbeiten -

 row.emptyProperty().addListener((obs, wasEmpty, isEmpty) -> { 
      if (isEmpty) { 
       row.setContextMenu(null); 
      } else { 
       if (row.getItem().name.get().equals("foo")) { 
        row.setContextMenu(contextMenu); 
       } 
      } 
     }); 

Frage - Gibt es eine Möglichkeit, dies die Bindings API zu erreichen ?

Antwort

0

Ihre Bindung tut dies:

Bindings.equal("foo", row.getItem().value) 

Aber Ihre Zuhörer tut dies:

row.getItem().name.get().equals("foo") 

Also vielleicht, indem diese in die Bindung funktionieren würde:

Bindings.equal("foo", row.getItem().name.get()) 
+0

Die Bindings.equal Signatur erfordert, dass der 2. arg ein Observable ist kein String –

+0

Also lassen Sie die ".get()" – DaveB

+0

Hast du meine Frage gelesen? –