Make element dirtying listener-based instead of blanket dirty on property change