namespace Sandbox.Bind; /// /// A proxy where set and get are done via functions /// internal class MethodProxy : Proxy { public Func Read { get; set; } public Action Write { get; set; } public MethodProxy( Func read, Action write ) { Name = "[MethodBind]"; Read = read; Write = write; } public MethodProxy( object target, Func read, Action write ) { Target = new WeakReference( target ); Name = "[MethodBind]"; Read = read; Write = write; } public override object Value { get => Read.Invoke(); set { if ( !CanWrite ) throw new System.NotSupportedException( "Binding is read only" ); if ( !Translation.TryConvert( value, typeof( T ), out var targetValue ) ) return; Write( (T)targetValue ); } } public override bool CanRead => Read != null; public override bool CanWrite => Write != null; public override bool IsValid => CanRead || CanWrite; public override string ToString() => $"[MethodBind]"; }