DelphiXe5中的双向绑定(使用使用TBindScope和TBindExpression,并覆盖AfterConstruction函数)

在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.

http://blog.csdn.net/diligentcatrich/article/details/24552151

原文地址:https://www.cnblogs.com/findumars/p/5037441.html