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、为什么你不写例子?
这个………………,一个字,懒!看懂,了解就好!