public void unbind() {
    if (null != dataListener) {
      if (!dataText.getControl().isDisposed()) {
        dataText.removeSelectionChangedListener(dataListener);
      }
      dataListener = null;
    }

    super.unbind();
  }
  public void bind(IBindingMediator manager) {
    super.bind(manager);

    this.dataListener = createDataListener(ModelUtils.getDualDirection(direction));

    dataText.addSelectionChangedListener(dataListener);
    dataText
        .getControl()
        .addDisposeListener(
            new DisposeListener() {
              public void widgetDisposed(DisposeEvent e) {
                unbind();
              }
            });
  }