참고 강좌: WPF C# Professional Modern Flat UI Tutorial - YouTube
소스코드: GitHub - plane90/_Study_WPF_ModernDesign
강좌를 보고 소스코드를 따라 쳤습니다.
그리고 응용을 하려던 중 막혀서 질문드려봅니다.
MainViewModel은 MainWidow.xaml의 DataContext로 사용됩니다.
그리고 SideBar의 RadioButton은 RelayCommand를 통해
ContentControl의 'Content’를 설정합니다.
참고로 DisplayView.xaml와 HomeView.xmal은 UserControl이고
DispalyViewModel과 HomeViewModel은 ContentControl의 Content가 되는 개체입니다.
DataTemplate을 통해 각 ViewModel이 DisplayView 또는 HomeView를 연결해준 것이죠.
제가 하려던 것은 HomeViewModel.cs에 몇가지 데이터를 정의하고
그 데이터를 HomeView의 컨트롤 Source(ListBox 같은…)로 사용하는 것입니다.
그리고 해당 Source를 편집할 수 있고 다른 View를 다녀와도 그대로 보존이 되어있어야됩니다.
여기서 문제가 발생합니다.
HomeView에서 HomeViewModel의 데이터를 참조하기 위해
Xaml에서 해당 클래스를 DataContext로 정의했더니 매번 새로운 HomeViewModel 개체가 생성됐습니다.
그래서 다른 View를 다녀오면 편집한 데이터가 모두 날아가버리는것이죠.
HomeViewModel에서 Trace.WriteLine(this.GetHashCode()); 구문을 넣고 출력값을 봤더니 매번 다른 값이 출력됩니다. 즉, Xaml의 DataContext 속성에 의해 계속 생성자가 호출해버리는 겁니다.
여기서 궁금한 것은
-
MainViewModel의 생성자에서 생성된 HomeVieModel 개체를 DataContext로 참조할 수 있는 방법이 있나요?
-
위 사항의 가능 여부에 상관없이 제가 MVVM을 잘못사용하고 있는 것인가요? 그리고 더 나은 Practice가 있을까요?
질문, 답변 모두 환영합니다.
감사합니다.