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.
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();
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...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With