안녕하세요, 오랜만에 글을 쓰네요. 다른 업무로 바쁘다가 다시 wpf 프로젝트를 잡고 하고 있습니다. 이제 어느정도 하다보니까 요령?이란것이 생겨서 어찌어찌 하고 있는데요.
아무래도 하면서도 좀 더 괜찮은 방법이 있지 않을까 해서 닷넷데브에 한번 올려봅니다 ㅎㅎ…
아래 예시코드 처럼 DisplayViewModel 에다가 AnalCamViewModel을 넘겨주고 있는데요. view:AnalCam 이란 view 말고도 다른 view들을 ViewModel에다가 할당하고 싶은데 다 따로 별도의 ViewModel을 선언해주고 DataTemplate으로 선언해놓고 사용해야 하나요?
이게 페이지를 작업하다보면 90% 동일한 UI에 10%만 다른 페이지들이 생기기 마련인데 일단은 제가 하는 방식은 다르게 표현해야 하는 UI를 Grid같은걸로 감싸고 Visibility를 Viewmodel에다가 바인딩해놓고 생성자에서 1번이면 Hidden 하고 2번이면 Visible 하는 방식으로 하였는데 이게 뭔가 화면을 제어하는건 맞는데 실시간으로 제어하는것도 아니고 최초에 구분만 지어주면 되는건데 바인딩하는게 좀 이상하기도 하고…
그래서 생각한게 xaml을 구분해놓고 쓰는게 어떤가 했는데 이건 또 Viewmodel을 각자 선언해줘야하는건가 싶네요.
DisplayViewModel = new AnalCamViewModel();
or
DisplayViewModel = new PictureViewModel();
위 상황에서 AnalCamViewModel에 연결해야할 View가 2개가 있는 경우입니다.
AnalCam1.xaml, AnalCam2.xaml 2개를 AnalCamViewModel.cs 뷰모델에 연결하고 싶은데 제가 아는 방법으로는 아래 코드 처럼
ViewModel을 각각 별도로 선언해서 연결하는 방법입니다.
근데 이러면 거의 중복되는 뷰코델 클래스를 2개 선언해야 하는 상황이니까 (AnalCam1ViewModel.cs, AnalCam2ViewModel.cs)
다른 방법이 있지 않을까 싶어서 질문드렸습니다.
답변감사합니다.
90% 동일한 UI와 10% UI만 분리하는 방법도 있겠네요. 괜찮은 방법 같습니다.
다만, 그럼 3개의 각기 다른 ViewModel 클래스를 선언해야하는게 조금 걸리네요.
10%다른 뷰가 뭐 동작을 한다기보다 흰색 원이 있고 없고 라던가, 텍스트가 조금 다르다던가 그런거라…
그런데 2분 답변보고 곰곰히 생각하니 제가 효율을 따지자고 한게 약간 모순적이네요…
저는 ViewModel 에서 달라져야 하는 UI의 Visibilty 속성을 바인딩하고 해당 UI를 on/off 하는게 썩 맘에 안들어서 어차피 UI적으로도 조금씩 다르니 View xaml이 분리되면 좋겠다고 생각했었습니다.
근데 생각해보면 2개의 View 코드도 중복된 코드에 10%정도만 다른 코드이니
ViewModel이 2개 생성되서 비효율이라고 말하나 그게 그거겠네요 ㅎㅎ;;;