There is a similar question on StackOverflow, check the answer there. Hope this will help you.
Here is the code you can use:
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
$fields['shipping']['custom_field'] = array(
'label' => 'Custom field',
'required' => 1,
'class' => array ('address-field', 'update_totals_on_change' )
);
return $fields;
}
Basically what is important here is the class 'update_totals_on_change'
. From here Woocommerce will handle everything by its functionality.