svoid addWeakChangeListener(IHasChangeListeners src, ChangeTriggerable target) { addWeakChangeListener(src, target, o -> o.change()); } svoid addWeakChangeListener(IHasChangeListeners src, A target, IVF1 action) { if (src == null || action == null || target == null) ret; var ref = weakRef(target); src.onChange(r { var target = ref!; if (target == null) src.removeChangeListener(this); else action.get(target); }); }