implement add/removeValueChangeListener