2010-04-17 1 views
2

MVVM을 배우고 딜레마를 시작했습니다.MVVM 좋은 디자인. DataSet 또는 RowViewModel

기본 ViewModel이 있고이 모델 안에 여러 개의 데이터 세트가 있습니다. 이제 데이터 세트의 각 행에 대해 새로운 ViewModel을 작성해야합니까? 또는 DataSet 자체를 DependencyProperty로 표시합니까? 이제 데이터 세트는 약 20 그 안에 행, 각 행에 바인딩 뷰 모델을 만들기 위해 각 행을 반복의 생각을 가지고 들어

는 .... 성능 이유와 메모리를위한 최선의 선택되지 않을 수도 있습니다 앞으로 2000 가지 이상의 행이있을 때와 같은 이유가 있습니다.

아직 RowViewModel을 만들고 데이터 집합을 반복하여 새로운 RowViewModel을 만들어야합니까? ObservableCollection RowViewModels 또는 DataSet을 노출?

이 DataSet/ViewModel에 대한 바인딩은 콤보 상자로 표시되므로 사용자가 지연없이 스크롤 할 수 있기를 기대하면서 볼 수있는 행만로드하는 것이 성능 문제가 될 수 있습니다.

도움을 주시면 감사하겠습니다.

답변

2

각 행에 ID, 이름, 그림 (논리가 관련되어있을 수 있음) 등이있는 복잡한 콤보 상자가 있고 각 행을 나타내는보기가있는 경우 모든 행 (rowViewModel)을 만들어야합니다. 바인딩은 그 코드를 테스트해야하기 때문에 (TDD!).

행당 문자열을 표시하려는 단순한 콤보 상자의 경우 문자열 목록이나 데이터 집합을 바인딩하는 것이 좋습니다.

피터가 말했듯이 이처럼 크게 커질 수있는 콤보 상자는주의해야합니다. 사용자가 마음에 들지 않을 것입니다.

또한 성능에 대해 염려하므로 큰 뚱뚱한 DataSet을로드하는 대신 문자열 목록을 채우는 DataReader를 사용하는 것이 좋습니다.

+0

DataReader 팁을 주셔서 감사합니다. 나는 그것을 살펴볼 것입니다. –

+0

+1 데이터 플레이어 팁. 그래서 거대한 dataset 질문에 대해 잊어 버린 viewmodel 문제에 매달렸다 :) –

1

중요한 질문 중 하나는 다음과 같습니다. 한 번에 모든 레코드를 표시해야합니까, 아니면 일종의 페이징/탐색 메커니즘이 필요합니까?

모든 행을 같은보기에 표시하려는 경우 각 행에 RowViewModels을 작성하면 분명히 오버 헤드가 추가됩니다. 뷰 모델이 행 데이터를 복사하는 대신 기본 행을 참조하게함으로써 오버 헤드를 줄일 수 있습니다.

어쨌든 모든 데이터를 스크롤하는 것이 최상의 사용자 경험이 아니기 때문에 일종의 페이지 탐색을 만들 것입니다. 말 크기가 20 인 경우 한 번에 20 개의 뷰 모델 만 필요합니다.

+0

진정한

건배,

앙드레는 것을, 나는 사용자가 전체 1000 개 항목을 볼 수 없을 것 같아요. 그리고 그것은 최선의 생각이 아닙니다. –