联盟两个ObservableCollection列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了联盟两个ObservableCollection列表相关的知识,希望对你有一定的参考价值。

我有两个ObservableCollection列表,我想团结起来。我天真的做法是使用联盟 - 方法:

ObservableCollection<Point> unitedPoints = observableCollection1.Union(observableCollection2);

ObservableCollection1 / 2也是ObservableCollection类型。但是编译器会为此行抛出以下错误:

类型“System.Collections.Generic.IEnumerable”无法隐式转换为“System.Collections.ObjectModel.ObservableCollection”。已经存在明显的转换。 (可能缺少转换)

(措辞可能不准确,因为我从德语翻译)。

谁知道,如何合并ObservableCollections并获得一个ObservableCollection作为结果?

先谢谢你,弗兰克

Edith说:我刚刚意识到,重要的是要提到我开发了Silverlight-3-Application,因为“ObservableCollection”类在SL3和.NET3.0场景中有所不同。

答案

LINQ Union扩展方法返回IEnumerable。您需要枚举并将每个项目添加到结果集合中: -

var unitedPoints = new ObservableCollection<Point> ();
foreach (var p in observableCollection1.Union(observableCollection2))
   unitedPoints.Add(p);

如果您想要ToObservableCollection,那么您可以:

public static class MyEnumerable
{
    public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source)
    {
        var result = new ObservableCollection<T> ();
        foreach (var item in source)
           result.Add(item);
        return result;
    }
 }

现在您的行是:

var unitedPoints = observableCollection1.Union(observableCollection2).ToObservableCollection();
另一答案

您想合并现有内容,但基本上有独立列表吗?如果是这样,这相对容易:

ObservableCollection<Point> unitedPoints = new ObservableCollection<Point>
    (observableCollection1.Union(observableCollection2).ToList());

但是,如果你想要一个可观察的集合,它实际上是对其他人的“观察”,我不确定这样做的最佳方式......

以上是关于联盟两个ObservableCollection列表的主要内容,如果未能解决你的问题,请参考以下文章

合并的 ObservableCollection

如何强制 ListView 在同一行中显示来自 ObservableCollection 不同元素的两个不同数据

增加WPF ObservableCollection性能

WPF Datagrid 动态生成列 并绑定数据

如何将 ObservableCollection 与 datagrid WPF 绑定

ObservableCollection刷新视图MVVM