Even if the CodeArea didn't expose a textProperty you could bind to, you could listen to changes in the underlying contact object inside the viewmodel and update it manually. contactModel.itemProperty.onChange { codeArea.setText(contactModel.notes.value) }