使用LiveBinding监控列表

Cob*_*ger 7 delphi list delphi-xe2 livebindings

我一直在尝试找到一种通用的方法来通知UI控件列表中的更改.例如,当一个对象被添加到列表中时,我希望它自动添加到列表框中.如果从列表中删除了一个对象,我希望它从列表框中自动删除.

不幸的是,Delphi的列表之间存在一些令人抓狂的不一致:TList <>.通知很好,但TStringList.OnChange甚至没有告诉你改变是什么,TList甚至没有任何通知!

我希望LiveBindings会给我一个监控大多数列表更改的正确方法,但到目前为止我还没有看到它.我看到的所有示例都填充了控件并设置了列表项和控件项之间的绑定(我的示例中的列表框项).但是从列表中添加/删除对象根本不会影响控件.

有没有人知道我错过了一种机制,或者更普遍的是,这是一种很好的通用方法吗?

澄清: 我之前似乎并不清楚.我需要通用方法的原因是因为我编写了一个可以连接到各种源的网格控件,包括一些现有代码.我编写了一个接口,网格接受它作为源,然后是一些适配器类来接受一些列表并使它们作为该接口可用.由于我也需要接受现有代码,因此不能覆盖TList.Notify.并且由于没有事件可以看到更改,因此它实际上意味着TList没有可由客户端使用的通知机制,例如我的适配器类.TStrings也没有,但TStringList引发了一个简单的OnChange,这意味着适配器类实际上无法确定已更改的内容.

我实际上有一个非常好的解决方案,使用TVirtualMethodInterceptor,但它完全停止在Delphi XE中工作,而不是在XE2中修复.

The*_*Fox 4

你错过了这个TList.Notify机制。

TList有一个Notify您必须覆盖的受保护过程。这就是 TObjectList 的工作方式。