2009-10-14 9 views
8

나는 단결하고자하는 두 개의 ObservableCollection 목록이 있습니다.연합 2 ObservableCollection 목록

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

ObservableCollection1/2도 형 ObservableCollection에의이다 : 방법 - 내 순진 접근 방식은 조합을 사용하는 것이 었습니다. 그러나 컴파일러는이 라인에 대한 다음과 같은 오류가 발생합니다 :

유형 "System.Collections.Generic.IEnumerable"가 "System.Collections.ObjectModel.ObservableCollection"암시 적으로 변환 할 수 없습니다. Explicite 변환이 이미 있습니다. (전환이 누락 된 것일 수도 있음)

(정확한 것은 아니며 독일어로 번역 된 것일 수도 있음).

누구나 ObservableCollections를 병합하고 ObservableCollection을 결과로 가져 오는 방법을 알고 있습니까? 사전에

감사합니다, 프랭크

에디스는 말한다 : 나는 그냥 클래스 "ObservableCollection에가"SL3 및 .NET3.0에 차이가 있기 때문에 나는, 실버-3-응용 프로그램을 개발하는 것을 언급 중요하다는 것을 깨달았 시나리오.

답변

10

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(); 
+0

멋진 답변 - 'for'가 아니라 foreach를 의미합니까? – kiwipom

+0

yap, foreach입니다. – Aaginor

+0

ooops, 예 foreach, javascript와 C# 사이에 fliting이 있습니다. – AnthonyWJones

8

기존 내용을 병합 하시겠습니까? 기본적으로 독립적 인 목록이 있습니까? 그렇다면, 그것은 상대적으로 쉽게 :

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

을하지만, 당신은 다른 사람의 "보기"효과적으로 하나 개 관찰 수집을 원한다면, 내가 가장 좋은 방법은 그것을 할 모르겠어요 ...

+0

나는 이것을 이미 시도했지만 ObservableCollection의 생성자는 매개 변수를 받아들이는 과부하가 없어 ... 그리고 Silverlight의 ObservableCollection이 .NET 3.0의 OberservableCollection과 다르다는 것을 깨달았다. 뭐? Silverlight에서 데스크톱 응용 프로그램과 동일한 클래스를 사용할 수 있다고 생각했습니다. 이러한 기본 클래스조차도 두 시나리오에서 다른 경우 어떻게 작동합니까? 어떻게 다른 클래스에 동일한 이름을주는 것에 대해서 생각할 수 있습니까? 그것은 절대적으로 이상합니다. 그 밖의 다른 것들은 조금 다릅니다 * – Aaginor

+0

사실 그들은 서로 다른 수업이라고 확신합니까? 아니면 Silverlight 버전에 일부 메서드/생성자가 없다는 것입니까? –

+0

@aaginor : 표준 .NET 라이브러리와 공통점이있는 많은 요소의 Silverlight 구현은 종종 상당히 단순화됩니다. 우리가 이미 잘 알고있는 것을 사용할 때 다시 한번 자신의 문서를 확인하는 것은 매우 짜증나게됩니다. 그것의 특히 SL3 문서 chm (또는 온라인) 형태로만 아직도있다 : ( – AnthonyWJones