2014-09-09 6 views
1

대규모 WPF 응용 프로그램을 구축 중이며 이것이 MVVM 패턴을 사용하여 프로그램을 구성하는 올바른 방법인지 알고 싶습니다.WPF : MVVM에서 뷰 모델을 구성하는 방법은 무엇입니까?

이 프로그램은 트리의 해당 지역에있는 사람들의 일반적인 인구에 관한 정보의 데이터베이스를 보유하고 있습니다. 이 트리 및/또는 사용자 목록은 모든 뷰 모델에서 공유되어 인구 통계를 다양한 차트에 표시합니다. 이 다양한 차트는 다른 탭의보기에 표시됩니다.

현재 사람의 정보를 포함하는 정적 트리가 있고 각 xaml 페이지는 기본 창의 탭에 해당합니다. 각 탭은 자체 뷰 모델에 바인딩되지만 해당 뷰 모델은 mainviewmodel을 상속하므로 mainviewmodel의 정보를 모든 뷰 모델에서 공유 할 수 있습니다.

예 :

MainViewModel.cs - (Contains the tree, list<people>, and other variables) 
Tab1ViewModel.cs - (Inherits MainViewModel) 
Tab2ViewModel.cs - (Inherits MainViewModel and maybe Tab1ViewModel) 
Tab3...etc 

MainWindow.xaml - Datacontext = MainViewModel 
Tab1View.xaml - Datacontext = Tab1ViewModel 
Tab2View.xaml - Datacontext = Tab2ViewModel 
Tab3...etc 

이는 MVVM 패턴을 설정하는 적절한 방법이 있나요? 다른 뷰에서 정적 데이터를 공유하는 더 좋고 간단한 방법을 모르겠습니다.

+0

보기 모델은보기를 따라야합니다. 그래서 무엇이 필요합니다. 나머지는 의견입니다. –

+0

감사합니다. 나는 마지막 프로젝트처럼 다른 "신의 물건"을 가지고 있을지, 아니면이 경우에 "하나님의 전모"를 피하고 싶습니다. – user2525395

+0

일반 OO 모델링 및 디자인보기와 다르지 않습니다. 수퍼맨 클래스는 피해야합니다. –

답변

1

내게 정말로 떠오르는 유일한 점은 탭이 MainViewModel에서 상속된다는 점입니다. 실제로는별로 이해가되지 않습니다.

탭보기 모델 SelectedPerson 또는에서 상속이

2

같은 같은 필요한 필드를 노출 기본보기 모델, 아니면 그냥 인터페이스를 사용자에 대한 참조 포함 (싱글을, 또는 이와 유사한 것)해야 것 같은데 클래스는 변수를 공유하지 않습니다. Tab1ViewModel 인스턴스가있을 때마다 MainViewModel의 모든 변수에 대한 새 인스턴스도 만들어 지므로 데이터는 Tab2ViewModel에 공유되지 않습니다 (차례대로 자체 복사본이 있음).

또한보기와 뷰 모델 간에는 1 대 1을 선호하는데, 이는 Tab1ViewModel이 MainViewModel 논리와 관련이 없어야 함을 의미합니다. 뷰 모델간에 공통적 인 동작 (속성 변경 이벤트, 기본 유효성 검사 등)을 공유하려면 추상 ViewModelBase를 만들 수 있습니다. 또한 뷰 모델은 일반적으로 서로에 대해 "알지"못합니다. 대신 정보는 중앙화 된 메시지를 통해 그들 사이에 흐르게해야합니다.

데이터를 공유하는 방법에 관한 문제는 실제로 MVVM과 관련이 없습니다. 가장 간단한 방법은 데이터를 중앙 집중식으로로드하고 각 뷰 모델의 생성자에 전달하는 것이지만 더 효율적인 솔루션은 종속성 삽입을 사용하는 것입니다. 배우는 데 약간의 시간이 걸리지 만 권장할만한 것이 있습니다.

관련 문제