2011-02-25 3 views
2

저는 mvvm에서 머리를 쓰려고 노력 중이며 좋은 기초를 제공 할 것으로 생각되는 테스트 응용 프로그램을 생각해 내었습니다. 내 신청서에 매 순간 나가서 공항에서 최신 항공편 도착 및 출발 정보를받는 서비스가 있다고 가정 해 보겠습니다. 이제 InboundView, OutboundView 및 GateView의 세 가지보기가 있다고 가정합니다. 인바운드 및 아웃 바운드보기에는 인바운드 및 아웃 바운드 항공편에 대한 다양한 항공편 세부 정보가 표시되며 이는 공항의 항공편 게시판에서 볼 수 있습니다. GateView는 유사한 비행 정보를 표시하지만 비행 # 대신 게이트 #로 정렬 될 수 있습니다.공통/전역 데이터는 어디에서 mvvm입니까?

그래서 Flight 객체의 모델에는 비행 데이터 세부 정보와 비행이 도착하면 적절히 업데이트 될 Gate 객체의 인스턴스가 포함됩니다.

3 개의 뷰 모두 동일한 비행 데이터 서비스를 사용하고 있으며 각 VM에 해당 서비스의 인스턴스를 전달할 수 있다는 것을 알고 있지만 각 뷰 모델에서 적절한 INPC 이벤트를 연결해야합니다. 보기/VM 수가 증가함에 따라 이상적입니다.

지금 당장, 각 VM은 전달 된 항공 데이터 수집을 감싸는 ListCollectionView를 사용하며 인바운드/아웃 바운드 등을 기준으로 정렬/필터링하지만 서비스 결과를 일종의 상위 프로그램으로 통합하려고합니다. 하위보기에 따라 자체에 대한 참조를 전달할 모델을 조회 한 다음 모든 INPC 등을 처리 할 수 ​​있습니다. 부모보기 모델 레벨에서 이벤트가 발생하면 해당 하위보기로 자동으로 트리크됩니다. 특정 비행은 각 VM에서 개별적으로 처리해야하는 대신 게이트와 같이 변경됩니다.

MVVM Light의 Messenger 프레임 워크를 조사했지만 각 하위 VM이 메시지를 등록하고 개별적으로 응답해야하는 것처럼 보입니다.

의미가 있습니까? 나는 올바른 길을 가고 있는가?

답변

0

3 개의 뷰 모두 동일한 비행 데이터 서비스를 사용하고 있으며 각 서비스 VM의 인스턴스를 전달할 수 있지만 각 뷰 모델에서 적절한 INPC 이벤트를 연결해야한다는 것을 알고 있습니다. 조회수/vms가 증가함에 따라 이상적이지 않습니다.

"서비스"가 INotifyPropertyChanged를 구현하는 경우 반드시이를 수행 할 필요는 없습니다. 속성 내의 속성 (예 : {Binding Path=FlightService.Gate}) 또는 다른 어떤 것으로 작동 할 수있는 속성에 바인딩 할 수 있습니다. (여기서 요구 사항을 아는 것은 어렵습니다.)

MVVM Light의 Messenger 프레임 워크를 살펴 보았지만 각 하위 VM이 메시지에 등록하고 응답해야하는 것처럼 보입니다. 그것을 개별적으로.

메시징 프레임 워크를 사용하려면 각 ViewModel에서 처리해야합니다. 또는 비행 서비스를 "끌어 들이기"위해 일부 형태의 서비스 위치 또는 생성자 주입을 사용할 수 있습니다. 후자는 내 개인적인 취향입니다.

각 VM에서이 문제를 처리하는 이점은 각 VM이 상황을 다소 다르게 처리하려고 할 가능성이 크다는 것입니다 (그렇지 않은 경우 1보다 많은 이유는 무엇입니까?). via IoC에서 서비스에 대한 참조를 가져 와서 필요한 경우 처리 할 수 ​​있습니다.