Wield behavior of ValueChangeMode

Hi,

I have a TextField and a ComboBox. The ComboBox’s dataprovider is equipped with a filter dependent on TextField input. So I add a valuechange listener to TextField which take input to reset the ComboBox’s filter. Here are my sample codes:

.....
TextField username = new TextField( "username:" );
username.setValueChangeMode( ValueChangeMode.ON_BLUR );

ListDataProvider dataProvider = DataProvider.ofCollection( ... );//some ArrayList<HashMap>
dataProvider.setFilter( row -> ( ( HashMap ) row ).get( "userid" ).equals( username.getValue() ) );
ComboBox database = new ComboBox( "database:" );
database.setDataProvider( dataProvider );
database.setItemLabelGenerator( row -> ( String ) ( ( HashMap ) row ).get( "databaseid" ) );

username.addValueChangeListener( event -> {
	if ( event.isFromClient() ) {
		dataProvider.setFilter( row -> ( ( HashMap ) row ).get( "userid" ).equals( event.getValue() ) );
		List itemsFromDataProvider = ...;//get List of filtered items from dataprovider
		if ( itemsFromDataProvider.size() > 0 ) {
			errordiv.setVisible( false );
			database.setValue( itemsFromDataProvider.get( 0 ) );
		}
		else {
			database.setValue( database.getEmptyValue() );
			if ( event.getValue() != null && event.getValue().length() > 0 ) {
				errordiv.setVisible( true );
			}
			else {
				errordiv.setVisible( false );
			}
		}
	}
} );
.....

The wield behavior is when the valuechangelistener is called whenever any key was hit. I changed the ValueChangeMode to ON-CHANGE, and the behavior is the same. I am using 11.0.3. Please kindly advise where I was wrong.

Best regards,
Joey