2011-03-25 1 views
0

내 ViewModel 클래스의 명령 수를 줄이려고합니다. 5 개 이상의 List를 포함하는 ViewModel이 하나 있는데 (보기에 Listbox를 사용하여 Presentation에 ItemSource 매개 변수에 ObservableCollection을 바인딩하고 SelectedItem 속성을 바인딩 함) 각 목록에는 추가/제거/등 버튼이 있어야합니다. .Silverlight 명령 MVVM

그래서, 그것은 다음과 같습니다

public class PersonViewModel : ViewModelBase 
{ 
    Person _Person; 
    private ObservableCollection<WorkPlaceViewModel> _WPlaces; 
    private ObservableCollection<LanguageViewModel> _Languages; 
    ... other lists 

    private WorkPlaceViewModel _SelectedWorkPlaceView; 
    ... 

} 

추가 5 × 명령은 ViewModel에 큰 조금 있습니다. CommandParameter에 문자열을 하드 코딩하고 ViewModel의 스위치 케이스로 처리 할 수 ​​있지만 해킹과 같은 것 같습니다. : p 또는 각 목록 상자에 대해 제거 명령을 만들고 SelectedItem을 매개 변수로 전달해야합니까?

MVVM에서 가장 좋은 방법은 무엇입니까?

답변

1

왜 viewmodel에 뷰 모델 모음이 있습니까? 성취해야 할 PersonViewModel은 무엇입니까? 보기에 여러보기로 분할하고 여러보기 모델에 바인딩해야하는 것처럼 들립니다. 뷰와 뷰 모델은 커플 링을 줄이기 위해 가능한 한 작아야합니다.

즉, 각 관찰 가능한 컬렉션에서 추가/제거 명령을 권할 것입니다. 당신이 짐작했던 것처럼 하드 코드 문자열을 사용하는 것은 지저분합니다. 관찰 가능한 각 수집에는 각 수집에 대해 다른 논리를 허용하고 유지 관리가 가능한 자체 추가/제거가 있습니다.

ViewModel에서 더 많은 코드를 게시하고 앱을 조금 설명 할 수 있습니까? 이것이 더 나은 디자인 결정이 될 수 있는지 판단하는 데 도움이됩니다.

+0

목표는 직원을위한 프로필 페이지를 만드는 것입니다. 프로필 페이지에서 직원의 이전 직장, 교육 정보, 기술 등이 목록 상자에 표시됩니다. 각 직장, 교육 등은 자체 모델 클래스를 가지고 있으며 자체 VM입니다. ObservableCollections를 별도의 클래스 (PersonViewModel에서 WorkPlaceViewModels의 OCollection 대신 WorkPlaceListViewModel을 사용하는 대신)에 넣고 거기에 명령을 구현하면서 코드를 다시 작성합니다. 이 방법으로 이러한 ListViewModel은 PersonViewModel 대신 명령을 처리합니다. – npalotai