namespace RosettaUI { /// /// Binder, which targets a portion of the parents /// public abstract class ChildBinder : BinderBase { protected readonly IBinder parentBinder; protected ChildBinder(IBinder parentBinder) { this.parentBinder = parentBinder; getter = Getter.Create(() => GetFromParent(parentBinder.Get())); } public override bool IsNull => parentBinder.IsNull || base.IsNull; public override bool IsNullable => parentBinder.IsNullable || base.IsNullable; public override bool IsReadOnly => false; protected abstract TValue GetFromParent(TParent parent); protected abstract TParent SetToParent(TParent parent, TValue value); protected override void SetInternal(TValue value) { var parent = parentBinder.Get(); parent = SetToParent(parent, value); parentBinder.Set(parent); } } }