2013-06-19 3 views
1

속성 내에서 ObservableCollection을 필터링 할 수 있습니까? 나는의 변화를 시도했다 다음 속성 getter에서 Linq 필터링

public ObservableCollection<Worker> Workers 
{ 
    get { return DataManager.Data.MasterWorkerList.Where(w => w.Known == true); } 
    set { DataManager.Data.MasterWorkerList = value; } 
} 

나는 말한다 오류 얻을 :

암시 에 'System.Collections.Generic.IEnumerable' '유형 을 변환 할 수 없습니다를 System.Collections.ObjectModel . ObservableCollection '. 명시 적 변환은

나는 타입 캐스팅, 프로그램 컴파일 (이? 당신이 캐스트를 누락) 존재하지만, 나는 InvalidCastException가 '형 의 개체를 캐스팅 할 수

가 없습니다 말을 얻을 WhereEnumerableIterator 1[AoW.Models.Worker]' to type 'System.Collections.ObjectModel.ObservableCollection 1 [AoW.Models.Worker] '

이 방법으로 필터링 할 수 있습니까? 그렇다면 무엇을 놓치고 있습니까?

+2

가능한 중복 것 (http://stackoverflow.com/이 같이 수행 할 수 있습니다 [ObservableCollection에 할 IEnumerable을 변환하는 방법?] 질문/3559821/how-to-convert-ienumerable-to-observablecollection) –

답변

3

IEnumerable<Worker>ObservableCollection<Worker>으로 변환해야합니다.

return new ObservableCollection<Worker>(DataManager.Data.MasterWorkerList.Where(w => w.Known == true)); 

당신은 확장 메서드를 정의하여 코드를 읽기 쉽게 만들 수 있습니다 : 당신이 아래 새로운 하나를 만들 때 ObservableCollection의 생성자로 IEnumerable를 전달하여이 작업을 수행 할 수 있습니다.

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source) 
{ 
    if (source == null) 
    { 
     throw new ArgumentNullException("source"); 
    } 
    return new ObservableCollection<T>(source); 
} 

thusly 히, 당신의 코드는 매우 간단되고의 읽을

public ObservableCollection<Worker> Workers 
{ 
    get 
    { 
     var workerList = DataManager.Data.MasterWorkerList.Where(w => w.Known == true); 
     return workerList.ToObservableCollection<Worker>(); 
    } 
    set 
    { 
     DataManager.Data.MasterWorkerList = value; 
    } 
} 
+0

감사합니다. 이것은 완벽하게 작동합니다. –

+0

사실, 어떤 이유로 인해 ObservableColection의 변경 사항에 따라 UI가 업데이트되지 않습니다. –

+0

하지만 답은 정확합니다. 문제가 더 있습니다. 다른 질문을 올리시기 바랍니다. –