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...