如何判断某人何时正在读取 CollectionBase 中的项目

发布于 2024-11-16 21:09:05 字数 376 浏览 4 评论 0原文

我不确定使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

擦肩而过的背影 2024-11-23 21:09:05

对于 CollectionBase 来说这是不可能的。 OnValidate() 仅在 OnInsert()OnRemove()OnSet() 之前调用。

您可以从 ArrayList 继承并覆盖索引器属性 (ArrayList.Item)。

It's not possible with a CollectionBase. OnValidate() is only called prior to OnInsert(),OnRemove(), and OnSet().

You can inherit from ArrayList and override the indexer property (ArrayList.Item).

貪欢 2024-11-23 21:09:05

看起来您正在寻找虚拟化集合。 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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文