【问题标题】:Merging listviewcollections合并列表视图集合
【发布时间】:2013-06-06 11:44:44
【问题描述】:

假设我有两个列表视图,称为 A 和 B。我用 20 个项目填充 A,几分钟后,我也用 20 个项目填充 B。两个列表都包含完全不同的数据,没有重复。

现在,出于某种我们不知道的原因,我很想将 B 中的内容添加到列表视图 A。当然,我可以使用简单的 ForEach 循环来完成此操作,我会遍历 B 中的每个项目并将其添加到 A。

但这需要时间和处理能力!真正的旧系统(想想蹩脚的 CE 手持设备)肯定会求饶!于是我开始思考,如果有办法一次性合并 B 的 listviewcollection 和 A 的 listviewcollection 呢?

是否可以在没有ForEach 循环的情况下合并两个列表视图集合?

【问题讨论】:

  • 您使用的是什么版本的 .net?这两个列表包含多少项? B 中的某些项目是否已经在 A 中,需要过滤掉以避免重复?
  • 我对问题进行了一些更新,以提供您问题中要求的信息。
  • 您可能不会获得任何性能,因为即使使用AddRange 方法也可能非常慢。在某种程度上,必须有人添加到集合中。我发现手动操作通常会更好...将两个集合变成一种友好的格式,合并,然后清除原始集合并添加回新合并的集合。正如@allo_man 所建议的那样,您可能还想做其他事情,这样您就可以完全控制。

标签: c# listview .net-3.5


【解决方案1】:

类似:

MyLvCollection.Items.AddRange( 
MyOtherLvCollection.Select(wi => new ListViewDataItem( 
    wi.Name, new string[]{wi.ID.ToString()} ) ).ToArray() );

编辑:如果您真的希望它在客户端执行(而不是 Web 服务等)...然后考虑使用 CompositeCollection,不知道它的性能,但似乎使用类似的东西来解决您的困境XAML。

【讨论】:

  • 我会使用类似这样的语法,但 linq 并不比 foreach 快,而且对于 20 个项目,我看不出即使是非常旧的 CE 设备也会如何运行到地面. stackoverflow.com/questions/1044236/…
  • 您是否在 CE 设备上运行网络服务器?如果不是,为什么在这种情况下服务器端代码会受到客户端的影响?
  • P.S.您是否考虑过使用 CompositeCollection? msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多