如何判断某人何时正在读取 CollectionBase 中的项目
我不确定使用 CollectionBase 类是否可以实现这一点。我想知道何时有人访问 CollectionBase 类中的项目。
最终目标是创建一个“VirtualMode”(类似于 DataGridView 控件),它允许我在用户获取数据之前检查和验证发出的数据。
因此,会发生的情况是,他们可以创建一个包含 20 个对象的集合,我们在内部修改 IList 以包含 20 个空对象,然后当他们尝试读取一个项目时,如果该项目为空,我们将转到外部数据源并读取就在那个时候。然后我们用读取的类替换现有的空对象,下次他们尝试访问它时,他们会获得缓存的版本。
输入后。我想知道 OnValidate 是否是执行此操作的正确位置。
任何帮助将不胜感激。
特雷弗·沃森
I'm not sure if this is possible using a CollectionBase class. I'd like to know when somebody is accessing an item in a CollectionBase class.
The final goal is to create a "VirtualMode" (similar to the DataGridView control) that allows me to check and validate the data going out prior to the user getting it.
So what would happen is they could create a collection of say, 20 objects, internally we modify the IList to contain 20 null objects, then when they attempt to read an item, if it is null, we go to the external data source and read it in at that time. Then we replace the existing null object with the read class and next time they try to access it, they get the cached version.
After typing that out. I wonder if the OnValidate might be the right spot to do that.
Any assistance would be greatly appreciated.
Trevor Watson
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于
CollectionBase
来说这是不可能的。OnValidate()
仅在OnInsert()
、OnRemove()
和OnSet()
之前调用。您可以从 ArrayList 继承并覆盖索引器属性 (
ArrayList.Item
)。It's not possible with a
CollectionBase
.OnValidate()
is only called prior toOnInsert()
,OnRemove()
, andOnSet()
.You can inherit from
ArrayList
and override the indexer property (ArrayList.Item
).看起来您正在寻找虚拟化集合。 CodeProject 上的这篇文章 有一个很好的实现(它旨在用于 WPF 中的数据绑定,但它可能可以在其他情况下使用)
Looks like you're looking for a virtualizing collection. This article on CodeProject has a nice implementation (it's intended for data binding in WPF, but it can probably be used in another context)