2011-09-29 2 views
1

나는 XML 피드의 데이터를 파싱하는 루틴을 가지고있다.관찰 가능한 컬렉션을 필터링 할 때 뭔가가 빠졌습니까?

... 

    matches.Add(_item); 
} 

이 그리고 곧 내가 원하는이 후 나는에 중단 점을 넣을 경우이 후 내 where 절

if (this.MatchType == FixtureType.Played) 
{ 
    matches = matches.ToList().Where(
     m => 
      m.matchResult == "D" 
    ).ToObservableCollection(); 
} 

일치하는 항목 만 포함, 나는 일치 이제 항목이 포함되어 있음을 알 I 찾고있어.

이제 문제는 observablecollection에 데이터 바인딩 된 컨트롤에 예비 데이터가 있다는 것입니다.

답변

5

문제는이 시나리오

  • 컨트롤이
  • 에 당신이 ToObservableCollection 전화

을에서 만든 새로운 하나를 바인딩 원래 2 개 ObservableCollection 경우가 있다는 것입니다 새로운 ObservableCollection 인스턴스로 리 바인드해야하는 컨트롤에 표시 할 새 결과를 얻으려면 원본 인스턴스를 인라인으로 수정하거나 수정합니다. matches의 이전 인스턴스로 제어 냉동차, 당신은 새로운 관찰 모음을 만들고 matches에 그 할당하지만 컨트롤이 matches 변수에 바인딩되지 않지만 값 matches이 있었다 때문이다

var results = matches.Where(m => m.matchResult == "D").ToList(); 
matches.Clear(); 
foreach (var cur in results) { 
    matches.Add(cur); 
} 
+0

그 효과가있는 –

+0

@HiTechMagic 예 유효한 해결책입니다. 일반적으로 컬렉션을 읽기 전용 속성으로 노출하여 문제를 완전히 피하는 것이 가장 좋습니다. – JaredPar

1

그것이 묶여있을 때. 대신 일치 항목을 수정하고 조건과 일치하지 않는 항목을 모두 제거해야합니다.

0

나는 왜 바인딩 할 프로그래밍 방식의 변수가 있는지 묻습니다.

MVVM Light와 같은 MVVM 프레임 워크를 사용하면 이러한 종류의 시나리오를 매우 잘 정렬 할 수 있습니다.

뷰 모델에서 속성을 가지고 뷰를 바인딩하면 뷰 모델을 업데이트하면 페이지가 자동으로 업데이트됩니다.

많은 예가 있습니다. DEV 도구의 데이터 바인딩 된 템플릿 (기본 notifypropertychanged 동작을 구현 함)을 사용하면 MVVM light (http://mvvmlight.codeplex.com)로 업 스케일링하거나 좋아하는 Calburn.Micro (http://caliburnmicro.codeplex.com/)

+0

올바르게 이해하려면 프로젝트를 mvvmlight로 업그레이드해야합니다. –

관련 문제