namespace RosettaUI { /// /// 値を持ち外部と同期するElement /// public abstract class FieldBaseElement : ReadOnlyFieldElement { public FieldOption Option { get; } private readonly IBinder _binder; protected FieldBaseElement(LabelElement label, IBinder binder, in FieldOption option = default) : base(label, binder) { _binder = binder; Option = option; Interactable = !binder.IsReadOnly; } protected override ElementViewBridge CreateViewBridge() => new FieldViewBridgeBase(this); public class FieldViewBridgeBase : ReadOnlyValueViewBridgeBase { private FieldBaseElement Element => (FieldBaseElement)element; public FieldViewBridgeBase(FieldBaseElement element) : base(element) { } public void SetValueFromView(T t) { Element._binder?.Set(t); Element.NotifyViewValueChanged(); } } } public static partial class ElementViewBridgeExtensions { public static FieldBaseElement.FieldViewBridgeBase GetViewBridge(this FieldBaseElement element) => (FieldBaseElement.FieldViewBridgeBase)element.ViewBridge; } }