WPF MVVM CommunityTOOLKIT 뷰모델 바인딩 관련하여 궁금한점이 있습니다.

MVVM 모델의 장점 중 하나가 뷰모델은 추상화된 뷰이기 때문에 하나의 뷰모델을 여러 뷰가 바인딩해서 사용할 수 있다고 알고 있는데요
보통 CommunityTOOLKIT을 이용하면 저 같은경우에 데이타컨텍스트 참조를 아래와같이 하는데요
this.DataContext = App.Current.Services.GetService<MainWindowViewModel>();

위에서 언급한 장점을 실현하려고
this.DataContext = App.Current.Services.GetService<AnotherWindowViewModel>()
를 추가하니 실제로 anotherViewModel을 MainWindow.cs에서 참조하니 가능하더라구요

근데 이런식으로 여러뷰모델을 참조하는 방식이 맞는건지, 방법 자체는 올바른건지에 관한 의문이 들어서 질문 올립니다.

3개의 좋아요

제 개인적인 생각은…

하나의 뷰는 여러 개의 뷰모델을 가질 수없고
하나의 뷰모델은 여러개 뷰를 가질 있다

라고 가지고 있는 터라…

아마 맞을겁니다!

5개의 좋아요

@이광석 님의 의견에 더해서… 저는 둘 다 문제가 없다고 생각합니다.

여러 개라는 표현이 여러 개의 인스턴스로 잘못 해석될 수 있어서 저는 형식으로 표현해 보겠습니다.

뷰모델이 특정 뷰 형식에만 연결될 필요는 없습니다. 이것은 꽤 명백한데요. 뷰모델은 뷰와는 아무런 연결점(결합 지점)이 없기 때문입니다. 이것은 광석님 의견과 동일합니다.

반대로 뷰가 특정 뷰모델 형식만 연결되어야만 하느냐… 이것은 다른 의견이 있을 것 같은데요, 저는 그럴 필요는 없다고 생각합니다. 다만, 어떠한 뷰모델 형식이든 수용하는 것은 아니고 추상 클래스 또는 상위 클래스 또는 인터페이스를 통해서 접근하는 것이 객체지향 방향에서 옳은 것 같습니다.

예를 들어 사용자의 정보를 표시하는 뷰가 있다고 할 때 사용자는 관리자 또는 소비자가 있을 수 있습니다.

class User // 구현 부는 설명 상 생략합니다.
class Admin : User
class Customer : User

뷰모델은 이 때 User라는 형식으로 바인딩한다면 사용자의 기본적인 정보를 관리자나 고객 상관없이 표시할 수 있습니다.

5개의 좋아요

오히려 제가 더배우고 갑니다!
감사합니다 :smile:

5개의 좋아요