code: private void bindButtonEnabling() {
          final BooleanBinding bexpr = new BooleanBinding() {
  
              @Override
              protected boolean computeValue() {
                  return !(object().sourcePath() != null && object().sourcePath().exists() && object().sourcePath().isDirectory()
                          && object().targetPath() != null && object().targetPath().exists() && object().targetPath().isDirectory());
              }
          };
  
          final ChangeListener<File> cl = new ChangeListener<File>() {
  
              @Override
              public void changed(final ObservableValue<? extends File> observable, final File oldValue, final File newValue) {
                  bexpr.invalidate();
              }
          };
  
          object().pSourcePath().addListener(cl);
          object().pTargetPath().addListener(cl);
  
          view().getStartButton().disableProperty().bind(bexpr);
  
          final SimpleListProperty<FileComparison> filteredListProperty = new SimpleListProperty<>(view().getTable().getItems());
          view().getExportCSV().disableProperty().bind(filteredListProperty.emptyProperty());
  
          final SimpleListProperty<FileComparison> listProperty = new SimpleListProperty<>(object().pLastResult());
          view().getMissing().disableProperty().bind(listProperty.emptyProperty());
          view().getDowngraded().disableProperty().bind(listProperty.emptyProperty());
          view().getNewer().disableProperty().bind(listProperty.emptyProperty());
          view().getSame().disableProperty().bind(listProperty.emptyProperty());
          view().getUpdated().disableProperty().bind(listProperty.emptyProperty());
          view().getUpgraded().disableProperty().bind(listProperty.emptyProperty());
      }
docs: TODO To complete.