Delphi XE2 之 FireMonkey 入門(30) - 數據綁定: TBindingsList: TBindExpression 的 OnAssigningValue 事件
表達式中的函數有限, 譬如我想通過綁定輸出文本的長度(譬如在 Label1 中綁定輸出 Edit1.Text 的長度)就沒有相應的函數;
這可在 TBindExpression 的 OnAssigningValue 事件中處理.
TBindExpression 和它的兄弟們 (TBindExprItems、TBindLink、TBindListLink、TBindGridLink、TBindPosition、TBindList、TBindGridList、TBindDBEditLink、TBindDBTextLink、TBindDBListLink、TBindDBImageLink、TBindDBMemoLink、TBindDBCheckLink、TBindDBGridLink) 擁有相同的事件.
先在窗體上添加 Label1、Edit1、BindingsList1, 然後激活 Edit1 的 OnKeyUp 事件和窗體的默認事件;
代碼中手動完成了 OnAssingningValue 事件, 在設計時添加事件會更方便.
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types,
FMX.Controls, FMX.Forms, FMX.Dialogs, Data.Bind.EngExt, Fmx.Bind.DBEngExt, System.Rtti,
System.Bindings.Outputs, FMX.Layouts, Data.Bind.Components, FMX.Edit;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
BindingsList1: TBindingsList;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
procedure MyOnAssigningValue(Sender: TObject; AssignValueRec: TBindingAssignValueRec; var Value: TValue; var Handled: Boolean);
end;
var
Form1: TForm1;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
with TBindExpression.Create(BindingsList1) do
begin
ControlComponent := Label1;
ControlExpression := ;
SourceComponent := Edit1;
SourceExpression := ;
OnAssigningValue := MyOnAssigningValue; Active := True;
end;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
begin
BindingsList1.Notify(Sender, );
end;
procedure TForm1.MyOnAssigningValue(Sender: TObject; AssignValueRec: TBindingAssignValueRec; var Value: TValue; var Handled: Boolean);
begin
Value := Length(Value.ToString); end;
end.