2010-06-23 4 views
3

이것은 큰 문제입니다. 온라인 WCF 서비스에서 데이터를 가져 오는 WPF/MVVM 응용 프로그램을 작성하고 싶습니다.MVVM : 모델이 백그라운드 스레드에 의해 끊임없이 변경되면 어떻게 될까요?

문제는 인출 프로세스가 매 15 초마다 발생해야한다는 것입니다 (시간이 중요한 응용 프로그램).

항상 변경되는 IEnumerable이 있습니다. WCF 서비스를 확인할 때마다 시간 데이터가 포함되어 있기 때문에 다른 값을 갖게됩니다.

어떻게 생각하나요? ViewModel에서 ObservableCollection을 지우는 것이 옳지 않습니까? 아니면 그렇습니까?

+0

항목 수가 변경되거나 항목의 데이터 만 변경됩니까? –

+0

두 가지 모두 실제 데이터를 기반으로 모든 데이터가 지속적으로 변동합니다. – StormianRootSolver

답변

5

중지 및 접근 방법이 될 수 귀하의 ObservableCollection에의 변경의 갱신을 재개 :

참조 대답 : 당신이 컬렉션 아래를 업데이트 분명 다음 다시 시작 ItemsControl.ItemsSource MVVM performance

이런 식으로 당신이 동안 일시 중단 할 수 있습니다 때 ' 다시 끝났어. 이 접근법은 컬렉션을 변경하고 많은 변경 업데이트 이벤트를 생성하는 문제를 완화해야합니다.

+0

고맙습니다. 저는 즉시이 수업을 구현할 것입니다, 이것은 훌륭합니다. :-) – StormianRootSolver

1

수천 개의 항목과 같이 큰 변경 사항이없고 스레드 안전을 관리하는 한 괜찮습니다.

컬렉션에서 항목 수가 변경 될 때 자동 새로 고침을 지원하려면 INotifyPropertyChanged을 구현하는 개체 속성의 자동 새로 고침을 지원하고 ObservableCollection을 사용하십시오.

대용량 컬렉션의 경우 컬렉션을 지우고 새 데이터로 채우는 대신 이전 항목과 새 항목 사이의 변경 사항을 찾아 그에 따라 업데이트하여이 프로세스를 최적화 할 수 있습니다.

스레드 안전성을 관리하려면 직접/간접적으로 코드를 넣어야합니다 (여기에는 ViewModel 속성을 변경하여보기를 업데이트 함) Dispatcher.Invoke 메서드에서보기를 변경합니다.

+0

이것이 답이라고 두려웠습니다 ... 실제로 업데이트를하는 동안 화면을 멈추는 방법이 필요했습니다. +1 어쨌든 도와 주셔서 감사합니다. :-) – StormianRootSolver

관련 문제