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);
});
}