2011-08-30 1 views
1

대량 데이터 (백만 행)를 선택하고 DB 테이블을 업데이트해야한다는 요구 사항이 있습니다. 지금, 나는 내가 BindingSource 구성 요소를 통해 GUI에 수밖에 INotifyPropertyChanged 모든 공용 속성을 구현하는 ViewModel 클래스가 (사용이 MSDN에 규정 된 같은) BackgroundWorker의 덩어리로 데이터 청크Backgroundworker - 데이터 바인딩 - 업데이트보기

을 읽고있다 - 고전을 WinForms 방식 :

문제는 모든 논리가 하나의 ViewModel 클래스에 있다는 것입니다. 논리를 훨씬 더 나은 방법으로 어떻게 분리합니까? 데이터 가져 오기 및 업데이트 논리는 DoWork() 메서드에서 루프에 있으며 ReportProgress 메서드를 통해 BackgroundWorker의 UI 신호를 보냅니다.

EDIT - GUI 이외의 진행 상황 이외의 다른 데이터를 표시 할 필요가 없습니다. 그것의 다만 1 시간 공구. 제안?

편집 - 솔루션 - http://www.codeproject.com/KB/architecture/MVPVMWindowsForms.aspx

답변

1

이동 모델 클래스에 당신의 BackgroundWorker 구성 논리의 모든, 그리고 비동기 작업을 실행합니다. 새 레코드를 사용할 수있을 때 ViewModel에 알리기위한 이벤트를 제공하십시오.

일반적으로 ViewModel은 스레딩에 대한 지식이 충분하지 않아야합니다 (여기저기의 Dispatcher.Invoke 이외에). ViewModel은 View에서 입력을 받아들이고 Model을 호출 한 다음 INotifyPropertyChanged로 View를 업데이트해야합니다. 별로 ViewModel에 로직이 존재하지 않아야합니다.

아마도 ObservableCollection을 사용하고 싶지만 아직까지는 얻지 못했던 것처럼 들릴 것입니다.

+0

솔루션 나는 윈폼으로 만 일하고 –

+0

내 질문에 업데이트되었습니다. –