DelphiXe5中的双向绑定

在Delphi下等这一功能很久了,虽然C#下早已实现了这一功能。但是在Dephi下尝试这项功能时还是有些许的激动。闲言少絮,直接上代码。

unit BindingDemo;


interface


uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.Bind.EngExt, Vcl.Bind.DBEngExt,
  Vcl.StdCtrls, Data.Bind.Components, Vcl.Grids;


type
  TPerson = class(TObject)
  protected
    fName: string;
    fAge: integer;
  procedure
    SetName(const Value: string);
  public
    property Name: string read fName write SetName;
    property Age: integer read fAge write fAge;
  end;


type
  /// <summary>
  /// 一个object与ui控件绑定的简单例子
  /// </summary>
  TForm2 = class(TForm)
    bndscp1: TBindScope;
    bndngslst1: TBindingsList;




    Button1: TButton;
    Button2: TButton;
    edt1: TEdit;
    procedure btnLoadClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
  private
    fInitialized: boolean;
    fPerson: TPerson;
    procedure Initialize;
    { Private declarations }
  public
    { Public declarations }
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
  end;


var
  Form2: TForm2;


implementation


{$R *.dfm}


procedure TForm2.AfterConstruction;
begin
  inherited;
  Initialize;
end;


procedure TForm2.BeforeDestruction;
begin
  fPerson.Free;
  inherited;
end;


procedure TForm2.btnLoadClick(Sender: TObject);
begin
  fPerson.Name := 'Doogie Howser';
  fPerson.Age := 15;
  bndscp1.DataObject := fPerson;
end;


procedure TForm2.btnSaveClick(Sender: TObject);
begin
  bndngslst1.Notify(edt1, '');
end;


procedure TForm2.Initialize;
var
  expression: TBindExpression;
begin
  //Create a binding expression.
  expression := TBindExpression.Create(self);
  expression.ControlComponent := edt1;
  expression.ControlExpression := 'Text';
  //The Text property of Edit1 ...
  expression.SourceComponent := bndscp1;
  expression.SourceExpression := 'Name';
  //... is bound to the Name property of fPerson
  expression.Direction := TExpressionDirection.dirBidirectional;
  //Add the expression to the bindings list.
  expression.BindingsList := bndngslst1;
  //Create a Person object.
  fPerson := TPerson.Create;
end;


{ TPerson }


procedure TPerson.SetName(const Value: string);
begin
  fName := Value;
  //ShowMessage('Name changed to "'+ Value +'"');
end;


end.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值