2012-10-24 6 views
0

페이지 뷰로 구성된 Acrobat과 같은 문서 뷰어를 만들려고하고 각 페이지는 사용자의 재량에 따라 다양한 크기의 축소판 이미지로 구성됩니다. MVVM을 설계하는 방법을 잘 모르겠습니다. 순간 내가 가진 :초보자를위한 WPF MVVM 안내

DocumentViewModel, PageViewModel, ThumbnailViewModel이

이 DocumentViewModel는 ObservableCollection에()를 가지고 // 페이지

를 추적

PageViewModel는 ObservableCollection에있다() // 문서로 표시 할 축소판을 추적합니다.

그러나이 디자인으로 인해 문제가 발생합니다. 예를 들어 축소판 3 페이지가있는 경우 축소판의 절반이 2 페이지에서 제거 된 다음 3 페이지 축소판이 자동으로 2 페이지의 새로 사용 가능한 공간으로 이동해야합니다. 각 PageViewModel은 서로에 대한 인식을 가져야 만 MVVM 정책을 위반하게됩니다. DocumentViewModel 내에서 선언 된 2 ObservableCollection을 갖는 것이 더 낫지 않습니까?

도움, 조언, 조언, 안내를 환영합니다.

답변

0

해결! 저는 Helgeheldre의 제안으로 DocumentViewModel을 컨트롤러로 사용하고 Jen H는 Caliburn.Micro의 메시징 프레임 워크를 사용할 것을 제안했습니다.

모든 메시지는 DocumentViewModel (Via EventAgregator)으로 라우팅되며,이 DocumentViewModel은 TaskView를 개별 PageViewModels에 위임합니다.

1

ViewModels는 서로를 알아야 할 필요가 없습니다.

원하는 MVVM 프레임 워크를 사용하는 것이 좋습니다 (예 : Caliburn Micro). CM을 사용하면 서로 알지 못하는 사이에 메시지을 보낼 수 있고 완전히 비 연결으로 유지할 수 있습니다.

간단히 말하면, Caliburn Micro 프레임 워크는 메시지를 발송하기 위해 EventAgregator을 제공합니다. 메시지를 보내야하는 객체는 EventAggregator과 함께 메시지 유형을 등록하고 수신해야하는 객체는 EventAggregator에 등록해야합니다.

예를 보려면 Introduction to messaging with Caliburn.Micro’s EventAggregator을 참조하십시오.

+0

팁을 주셔서 감사합니다. 아직 MVVM 프레임 워크를 사용하지 않았습니다. 지금 귀하의 링크를 통해 읽고 있습니다. – ChaseTheSun

1

PageViewModels는 서로를 인식하면 안됩니다.

DocumentViewModel은 가지고있는 PageViewModels을 인식하고 ThumbnailViewModels의 재배포를 처리 할 수 ​​있습니다. DocumentViewModel이 PageViewModel 당 페이지 수와 ThumbNailViewModels를 처리하도록합니다.

ObservableCollection of Thumbnails를 DocumentViewModel로 이동하면 필요에 따라 PageViewModel을 동적으로 만들 수 있습니다. ThumbnailViewModel 콜렉션이 변경 될 때마다 알림을 받게되며,이를 기반으로 PageView 모델을 변경할 수 있습니다.

+0

마지막 문장에 관해 누가 재배포를 처리합니까? PageViewModels?서로에 대한 인식을 필요로하지 않겠습니까? 또는 DocumentViewModel이 재배포를 처리합니까? – ChaseTheSun

+0

내 생각은 그 책임을 DocumentViewModel에 부여하는 것이 었습니다. PageViewModels을 생성하는 책임이 있으므로 자연히 ThumbnailViewModels를 배포합니다. – helgeheldre