Reputation: 4782
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
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
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