Я использую TObjectBindSourceAdapter
для использования livebindings с объектом. Одно из свойств объекта, который я использую с TObjectBindSourceAdapter
, имеет перечисляемый тип, но поле в адаптере никогда не создается, когда я использую перечисляемый тип в своем объекте.
Единственное решение, которое я нашел на данный момент, - это определить перечисляемый тип как целое число в моем объекте и привести его к типу. Кажется, это работает нормально, но вы должны поддерживать приведение типов к перечисляемому типу и целым числам.
Вот пример кода, чтобы объяснить, что я имею в виду.
Первый пример, в котором используется перечисляемый тип, который я пробовал изначально и, похоже, не работает:
uses Data.Bind.ObjectScope;
Type
TMyEnumtype = (meOne, meTwo, meThree);
TMyObject = class
public
MyEnumType: TMyEnumtype;
end;
procedure TForm9.But1Click(Sender: TObject);
var
MyObject: TMyObject;
aBindSourceAdapter: TBindSourceAdapter;
begin
MyObject := TMyObject.Create;
MyObject.MyEnumType := meTwo;
aBindSourceAdapter := TObjectBindSourceAdapter<TMyObject>.Create(nil, MyObject, False);
if aBindSourceAdapter.FindField('MyEnumType') <> nil then
ShowMessage('MyEnumType found')
else
showmessage('MyEnumType not found');
FreeAndNil(MyObject);
FreeAndNil(aBindSourceAdapter);
end;
Второй пример, который, кажется, работает путем приведения типов к целым числам
uses Data.Bind.ObjectScope;
Type
TMyEnumtype = (meOne, meTwo, meThree);
TMyObject = class
public
MyEnumType: integer;
end;
procedure TForm9.But1Click(Sender: TObject);
var
MyObject: TMyObject;
aBindSourceAdapter: TBindSourceAdapter;
aEnumType : TMyEnumtype;
begin
MyObject := TMyObject.Create;
MyObject.MyEnumType := Integer(meTwo);
aBindSourceAdapter := TObjectBindSourceAdapter<TMyObject>.Create(nil, MyObject, False);
if aBindSourceAdapter.FindField('MyEnumType') <> nil then
ShowMessage('MyEnumType found')
else
showmessage('MyEnumType not found');
aEnumType := TMyEnumtype(aBindSourceAdapter.FindField('MyEnumType').GetTValue.AsInteger);
if aEnumType = meTwo then
showmessage('meTwo');
FreeAndNil(MyObject);
FreeAndNil(aBindSourceAdapter);
end;
Мне было интересно, сталкивался ли кто-то еще с этой проблемой, и есть ли, возможно, какое-то другое решение для ее решения, не возвращаясь к целым числам и продолжая использовать перечисленные типы. Я также не уверен, является ли мой обходной путь обычным способом сделать это или нет.