首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LiveBindings监视列表

使用LiveBindings监视列表
EN

Stack Overflow用户
提问于 2011-09-13 08:27:45
回答 2查看 1.6K关注 0票数 7

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

不幸的是,德尔菲的列表之间存在一些令人恼火的不一致: TList<>.Notify很好,但是TStringList.OnChange甚至没有告诉您更改是什么,TList甚至没有任何通知!

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

有没有人知道我错过了一种机制,或者更广泛地说,这是一种很好的通用方法?

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-13 11:10:48

你错过了TList.Notify机制。

TList有一个受保护的Notify过程,您必须重写它。这就是TObjectList的工作方式。

票数 3
EN

Stack Overflow用户

发布于 2011-10-19 18:47:50

稍晚回答,但通用TList有一个包含添加或删除项的OnNotify。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7398862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档