Не могу понять, как использовать livebindings с пользовательскими объектами - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь выяснить, как livebindings работает с определенным пользователем объектом.Поэтому я сделал простой пример, чтобы увидеть, как это работает, но это не так.Я искал всю информацию, чтобы увидеть, в чем проблема, но пока нет результата.

Этот пример основан на примере Джима Тирни (embarcadero evangelist).И я снова и снова сравниваю мой код с его кодом.К сожалению, я не вижу разницы, но, конечно, они есть ...

Мой код выглядит так:

Unit1.h

class TPerson : public TObject
{
    private:
        UnicodeString nom;
        UnicodeString prenom;
    public:
        __fastcall TPerson();
        __fastcall ~TPerson();
        __property UnicodeString Nom = {read=nom, write=nom};
        __property UnicodeString Prenom = {read=prenom};
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // Composants gérés par l'EDI
    TLabeledEdit *LabeledEdit1;
    TLabeledEdit *LabeledEdit2;
    TAdapterBindSource *AdapterBindSource1;
    TDataGeneratorAdapter *DataGeneratorAdapter1;
    TBindingsList *BindingsList1;
    TLinkControlToField *LinkControlToField1;
    TLinkControlToField *LinkControlToField2;
    void __fastcall PrototypeBindSource1CreateAdapter(TObject *Sender, TBindSourceAdapter *&ABindSourceAdapter);
    void __fastcall AdapterBindSource1CreateAdapter(TObject *Sender, TBindSourceAdapter *&ABindSourceAdapter);

private:    // Déclarations utilisateur
    TPerson* personne;
public:     // Déclarations utilisateur
    __fastcall TForm1(TComponent* Owner);
};

Unit1.cpp

__fastcall TPerson::TPerson() : TObject()
{
    this->nom = "Jon";
    this->prenom = "Stockton";
}
//---------------------------------------------------------------------------
__fastcall TPerson::~TPerson()
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    this->personne = new TPerson();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdapterBindSource1CreateAdapter(TObject *Sender, TBindSourceAdapter *&ABindSourceAdapter)
{
    ABindSourceAdapter = new TObjectBindSourceAdapter(this, this->personne, __classid(TPerson), true);
}

Unit1.dfm Дизайн формы

Визуальный LiveBinding Визуальный редактор LiveBinding

Но когда я выполняю это, моя основная форма, который раскрывает два свойства объекта TPerson, не отражает значение объекта TPerson, и вместо этого я могу видеть значение компонента TPrototypeBindSource. Результат основной формы

Итак, я ожидаю, что мои поля редактирования метки содержат значения моего объекта TPerson.Я также ожидаю, по определению livebinding, что если я изменю свои свойства TPserson во время выполнения, текстовые значения правок будут обновлены. Ожидается основная форма

...