MVVM 모델의 장점 중 하나가 뷰모델은 추상화된 뷰이기 때문에 하나의 뷰모델을 여러 뷰가 바인딩해서 사용할 수 있다고 알고 있는데요
보통 CommunityTOOLKIT을 이용하면 저 같은경우에 데이타컨텍스트 참조를 아래와같이 하는데요 this.DataContext = App.Current.Services.GetService<MainWindowViewModel>();
위에서 언급한 장점을 실현하려고 this.DataContext = App.Current.Services.GetService<AnotherWindowViewModel>()
를 추가하니 실제로 anotherViewModel을 MainWindow.cs에서 참조하니 가능하더라구요
근데 이런식으로 여러뷰모델을 참조하는 방식이 맞는건지, 방법 자체는 올바른건지에 관한 의문이 들어서 질문 올립니다.
여러 개라는 표현이 여러 개의 인스턴스로 잘못 해석될 수 있어서 저는 형식으로 표현해 보겠습니다.
뷰모델이 특정 뷰 형식에만 연결될 필요는 없습니다. 이것은 꽤 명백한데요. 뷰모델은 뷰와는 아무런 연결점(결합 지점)이 없기 때문입니다. 이것은 광석님 의견과 동일합니다.
반대로 뷰가 특정 뷰모델 형식만 연결되어야만 하느냐… 이것은 다른 의견이 있을 것 같은데요, 저는 그럴 필요는 없다고 생각합니다. 다만, 어떠한 뷰모델 형식이든 수용하는 것은 아니고 추상 클래스 또는 상위 클래스 또는 인터페이스를 통해서 접근하는 것이 객체지향 방향에서 옳은 것 같습니다.
예를 들어 사용자의 정보를 표시하는 뷰가 있다고 할 때 사용자는 관리자 또는 소비자가 있을 수 있습니다.
class User // 구현 부는 설명 상 생략합니다.
class Admin : User
class Customer : User
뷰모델은 이 때 User라는 형식으로 바인딩한다면 사용자의 기본적인 정보를 관리자나 고객 상관없이 표시할 수 있습니다.