var Src: TSomeClass; MyObject : TBoundObject<Boolean>; begin MyObject.Bind(Src, CompilerMagic(TSomeClass.SomeBooleanProperty)); end;instead of
var Src: TSomeClass; MyObject : TBoundObject<TSomeClass, Boolean>; begin MyObject.Bind(Src, 'SomeBooleanProperty'); end;Why? Because the first one is resilient to property renaming.
Until I can, I am stuck with using something similar to
var Src: TSomeClass; MyObject : TBoundObject<TSomeClass, Boolean>; begin MyObject.Bind(Src, function (const Ref:TSomeClass):Boolean // reads the bound prop begin Result = Ref.SomeBooleanProperty; end, procedure (const Ref: TSomeClass; const Value:Boolean) // writes the bound prop begin Ref.SomeBooleanProperty := Value; end); end;which actually has some benefits - such as being able to sanitize assigned values - but is way too verbose.
I wish...