Delphi 利用 LiveBinding 将对象绑定到界面元素

自己定义的一个类,其对象,如何绑定到界面元素?

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Tutorial:_Using_TAdapterBindSource_and_the_LiveBindings_Designer

另一篇文章更详细:

http://www.malcolmgroves.com/blog/?p=1084


具体方法:

比如自己定义了一个类:

TPerson = class
  private
    FMyName: string;
    FMyAge: Integer;
  public
    property MyName: string read FMyName write FMyName;
    property MyAge: Integer read FMyAge write FMyAge;
  end;


要点:

1. 设计期,拖一个 AdapterBindSource1 到界面上。然后在它的 OnCreateAdapter 事件里面去创建这个对象并绑定,代码如下:

procedure TForm1.AdapterBindSource1CreateAdapter(Sender: TObject;
  var ABindSourceAdapter: TBindSourceAdapter);
begin
  FPerson := TPerson.Create;
  FPerson.MyName := 'James';
  FPerson.MyAge := 28;

  ABindSourceAdapter := TObjectBindSourceAdapter<TPerson>.Create(Self, FPerson, True);
end;

1.1. 需要注意,FPerson := TPerson.Create; 这个必须是在 AdapterBindSource1CreateAdapter 里面。因为这个事件方法执行的时机,比 Form1.OnCreate 更早!

2. 拖一个 DataGeneratorAdapter1 到界面上,设置 AdapterBindSource1 的 Adapter 属性为这个 DataGeneratorAdapter1 ;

3. 右键点 DataGeneratorAdapter1 ,下拉菜单选择 Fields Editor。在里面增加字段。增加的字段,定义其字段名为 TPerson 的属性名字,类型为属性的数据类型。

4. 然后就可以在界面控件的邮件下拉菜单的 Bind Visually 出来的可视化绑定界面里面,看到 DataGeneratorAdapter1  有字段了。然后可以把它的字段连线到界面控件。

4.1. 弹出这个 Bind Visually 的方法还有:选择一个界面控件,在其 Property 编辑器里面找到 LiveBindings 点下拉。

5. 上述做法完成后,如果在界面修改了值,要将修改返回到对象,必须调用 AdapterBindSource1.ApplyUpdates 方法;如果程序给对象的属性字段修改了值,要反映到界面上,需要调用 AdapterBindSource1.Refresh.

补充:

1. 在运行期,释放掉原来的那个 FPersong,然后重新创建一个 FPerson := TPerson.Create; 重新给里面的 property 赋值后,调用 AdapterBindSource1.Refresh 方法,没问题。

2. 同上,如果释放掉 FPerson,然后采用 FPerson := TJSON.JSONtoObject<TPerson>(S); 的方法获得的新的 TPerson  的对象,然后做 AdapterBindSource1.Refresh 会出现 AV 异常。似乎采用 JSON 反序列化回来的对象有点问题。

3. 同上,如果 TPerson = class(TComponent) 然后从 JSON 反序列化回来, AdapterBindSource1.Refresh 成功,不会有异常。

4. 同3,在反序列化回来再刷新界面之前,必须对 FPerson 做一次序列化的操作,也就是 TJSON.ObjectToJSONString(FPerson) 的操作。否则同样会出现 AV 异常。这才是整个系统最奇怪的地方。



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值