Есть ли у кого-нибудь идеи, как я могу сделать TValue, используя ссылку на исходные данные? В моем проекте сериализации я использую (как предлагается в XML-Serialization) универсальный сериализатор, который хранит TValue во внутренней древовидной структуре (аналогично MemberMap в примере).
Это дерево элементов также следует использовать для создания формы динамической настройки и управления данными. Моя идея заключалась в том, чтобы определить свойство для данных:
TDataModel <T> = class
{...}
private
FData : TValue;
function GetData : T;
procedure SetData (Value : T);
public
property Data : T read GetData write SetData;
end;
Реализация методов GetData, SetData:
procedure TDataModel <T>.SetData (Value : T);
begin
FData := TValue.From <T> (Value);
end;
procedure TDataModel <T>.GetData : T;
begin
Result := FData.AsType <T>;
end;
К сожалению, метод TValue.From всегда копирует исходные данные. Поэтому всякий раз, когда приложение вносит изменения в данные, DataModel не обновляется, и наоборот, если я изменяю свой DataModel в динамической форме, исходные данные не меняются. Конечно, я всегда могу использовать свойство Data до и после изменения чего-либо, но поскольку я использую много Rtti внутри своей модели DataModel, я действительно не хочу делать это в любое время.
Может быть, у кого-то есть предложение получше?