Aaginor
Aaginor

Reputation: 4782

Union two ObservableCollection Lists

I have two ObservableCollection lists, that i want to unite. My naive approach was to use the Union - Method:

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

ObservableCollection1/2 are of type ObservableCollection too. But the Compiler throws the following error for this line:

The Type "System.Collections.Generic.IEnumerable" can't be converted implicit to "System.Collections.ObjectModel.ObservableCollection". An explicite conversion already exists. (Maybe a conversion is missing)

(wording may not be exact, as I translated it from german).

Anyone knows, how to merge both ObservableCollections and get an ObservableCollection as result?

Thanks in advance, Frank

Edith says: I just realized that it is important to mention that I develop a Silverlight-3-Application, because the class "ObservableCollection" differ in SL3 and .NET3.0 scenarios.

Upvotes: 9

Views: 25631

Answers (2)

AnthonyWJones
AnthonyWJones

Reputation: 189457

The LINQ Union extension method returns an IEnumerable. You will need to enumerate and add each item to the result collection:-

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

If you'd like a ToObservableCollection then you can do:

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;
    }
 }

Now your line is:

var unitedPoints = observableCollection1.Union(observableCollection2).ToObservableCollection();

Upvotes: 13

Jon Skeet
Jon Skeet

Reputation: 1500835

Do you want to merge the existing contents, but then basically have independent lists? If so, that's relatively easy:

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

However, if you want one observable collection which is effectively a "view" on others, I'm not sure the best way to do that...

Upvotes: 12

Related Questions