2016-08-23 3 views
0

ObservableCollection에 내 ViewModel에 INotifyPropertyChanged, 예를 들어 A가 있습니다. 이제 A를 반복하여 일부 요소를 업데이트 할 것입니다.업데이트 ObservableCollection 요소가 작동하지 않습니다.

public ObservableCollection<ClassA> A 
{ 
    get 
    { 
     if (this.a== null) 
     { 
      this.a= new ObservableCollection<ClassA>(); 
     } 
     return this.a; 
    } 
    set 
    { 
     this.a= value; 
     this.OnPropertyChanged("A");// implement PropertyChangedEvent 
    } 
} 

루프에서 값을 업데이트합니다.

foreach (var item in MyViewModel.A) 
{ 
    if(condition) 
     MyViewModel.A.Type= "CASH"; 
    else 
     MyViewModel.A.Type= "CHECK"; 
} 

하지만 세터 부분에 도달하지 못했습니다. 따라서 콜렉션은 갱신되지 않습니다.

답변

0

나는 내 자신의 방법을 사용합니다. 일반 목록을 사용하여 Observable Collection에서 모든 항목을 검색합니다. 그런 다음 일반 목록을 Observable Collection으로 변환합니다.

가장 좋은 방법은 아니지만 지금까지 해결되었습니다.

4

ObservableCollection<ClassA>의 요소를 업데이트하고 컬렉션을 새로운 값으로 설정하지 않는 것 같습니다. MyViewModel.A.Type = "CASH"을 호출 할 때 속성 변경을 원하면 ClassAINotifyPropertyChanged을 구현해야합니다.

(편집 : 다른 사람에게이 내용을 확인하려면 question/answer - 이것을 중복으로 표시 할 수 없습니다. 컬렉션 요소의 속성 변경을 모니터링 한 다음 속성 변경을 트리거해야합니다. ObservableCollection 수동으로. 컨테이너가 이것을 대신하지 않습니다.)

+0

아니요, 해 냈습니다. ClassA는 이미 INotifyPropertyChanged를 구현합니다. – Bigeyes

+0

확인. 이 [질문] (http://stackoverflow.com/questions/1427471/observablecollection-not-noticing-when-item-in-it-changes-even-with-inotifyprop)을 살펴 보도록 제안하십시오. 그들은 당신과 비슷한 것을하고있는 것처럼 보입니다. –

+0

나는 그것을 시험해 보았다. 그것은 ADD/REMOVE를 포함하고 있기 때문에 잘 작동하지 않습니다. 부품 코드를 교체해야합니다. – Bigeyes

관련 문제