Fire ValueChangeEvents only if necessary