2011-02-13 4 views
2

저는 꽤 전통적인 WPF 앱을 가지고 있습니다.ObservableCollection에서 항목 바꾸기가 WPF ItemsControl을 업데이트하지 않습니다.

나는했습니다

<ListBox ItemsSource="{Binding MyList}" ... 

으로 myList는

ObservableCollection<MyItem> 

MyItem이

INotifiyPropertyChanged를 구현하지 않는 경우 I Add OC에에 항목 밖으로 문제와 UI 업데이트됩니다. 내가

MyList[index] = newItem; 

를 통해 항목을 대체 때 는 UI가 가끔 업데이트합니다. 때로는 창이 다른 컨트롤을 선택하는 데 도움이되지만 종종 그렇지 않습니다. 초당 약 5 초에 업데이트가 도착합니다. 중요하다면 이것은 Win7 x64 시스템의 WPF 4입니다.

답변

2

은 교체는 ObservableCollections에 의해 등록되고 난 지금까지 아무런 문제 ...

나는 오류가 somwhere 다른 거짓말을 의심 없었다.

실수로 항목 자체를 교체하여 데이터 바인딩 문제를 해결합니다. ...

가끔씩 발생하는 문제가 발생하면 가끔 오류가 발생할 수 있습니다. 코드 논리에 오류가있을 수 있습니다. 가끔이 비 정상적인 행동을 가리키고 있기 때문에 정상적으로 어떤 프레임 워크에서도 만나지 않아야합니다.

+0

대체 항목이 다르지만 동일한 GetHashCode()를 발견했습니다. –

+0

아, 그건 상상하기 힘든 일입니다. –

3

내 생각에 인덱스 된 항목에 할당하는 대신 Remove()Insert(index, item)을 사용하는 것이 좋습니다. 항목을 제거하고 삽입하면 CollectionChanged 대리자를 발생시켜야합니다.

이 나에게 전혀 의미가 없습니다
+0

아니요, 이것은 전혀 차이가 없어야하며, 'CollectionChanged'는 또한 대체를 기록합니다. –

+1

난 모르겠지만 _why_이 트릭을 했어 –

+1

그건 사실일지도 모르지만 나는 그걸 남기지 않을거야. 그런 식으로하면 마스킹 할 수도있다. 물론 이것은 실제로 버그가 아니라면 말이다. WPF에서) –

관련 문제