Delphi 的 LiveBinding 小结

Delphi新提供了LiveBinding功能,实现了数据与显示的分离。LiveBinding是个好东西,但我们需要更详细的了解一下,才能更好的使用它。

1、什么样的控件能够使用LiveBinding功能绑定?

几乎所有的控件,它是基于RTTI信息的,所以,只要有RTTI信息的地方,理论上都可以。但是,实际上它类型于TDataLink,是有一个数据提供端Server(IObserver)和接收组件的。

2、绑定是单向的还是双向的?

有单向的,如TLabel的Caption/Text,只能赋值,而不能做为提供端,而只能做为接受端,也有可以双向的,如Edit,可以赋值和更改内容。

3、做LiveBinding前都应该做什么?

推荐先放一个TActionList上去,有些常规动作直接关联控件的Action,然后再与一些属性绑定就好了。

4、如何进行绑定?

在窗体上右击,选择Bind Visually,然后拖拖拉拉,建立控件字段之间的关联就好了。注意你看到的可能并不是控件的全部能绑定的属性,点击相应的 LiveBinding 设计器控件右下角的“…”可以选择更多的属性。

这里有两个特殊的地方:

(1)、有些控件在设计器里会发现 * 和 Synch 两个属性,建立它两的关联可以让两者之间建立同步关系,如一个TListBox和一个TPrototypeBindSource(好东西,它是生成一个随机的数据源,可以用来做演示或测试程序),当任意一个发生位置变动时,另一个也会定位到相应的位置。

(2)、有些可供绑定的属性只有在特定的属性指定时,才在列表中能显示出来,如果你找不到某个可以绑定的属性,尝试看看是不是有某个属性没有设置成正确的值。

5、LiveBinding效率如何?

这种省工夫的东西当然都是以牺牲效率为代价的。但方便、易用有时候可以让我们更快的完成工作,不是很好的事情吗?

6、我可以定制LiveBinding规则吗?

当然可以。当你拖拉建立一个关联时,你可能没注意到,它自动为你填加了一个TBindingsList类型的组件,点开它,你会发现更多的奥秘的哟。看看里面的每条规则的事件,你会发现世界从些与众不同了。

7、我怎么动态创建绑定规则?

能拖拖拉拉的事,肯定可以动态创建的。实际上,你在 6 中看到的每条绑定规则,都是 TBasicBindComponent 的子类的实例,你需要的就是创建这些实例,然后动态添加到规则中。一个简单的示例代码如下:

var
  ABinding: TLinkPropertyToField;
begin
  //1:创建对象
  ABinding := TLinkPropertyToField.Create(Self);
  //2.设置关联信息
  ABinding.DataSource := PrototypeBindSource1;
  ABinding.Component := Label1;
  ABinding.ComponentProperty := 'Text';
  ABinding.FieldName := 'ColorsName1';
  //3.激活绑定
  ABinding.Active:=True;
end;

8、为什么你不写例子?

这个………………,一个字,懒!看懂,了解就好!

分享到: