ToolBox.xaml에서 Theme의 일부분을 상속받고 View에 뿌려줍니다.
→ BasedOn ="{StaticResource ...}"로 받기 때문에 테마 변경 시 적용이 안됩니다.
그래서 한 것이 위에 소스처럼 Light 테마에 대한 ToolBox.xaml를 만든 후 올렸다 내렸다 하는 것입니다.
문제가 있냐는 말씀이 MVVM 관점에서 MVVM에 위배되냐는 의미라면, 엄밀히 말해 MVVM 관점에서는 문제가 있는 방식이라고 생각합니다. 테마는 단순히 사용자에게 어떻게 보여줄지에만 집중하는 Presentation Logic이니까요. ViewModel이 아니라 View에 있어야 할 내용이죠.
테마를 변경하는 방법이 문제가 있냐는 의미라면, 문제 없다고 생각됩니다. 일반적으로 실시간으로 테마를 변경할 때 첨부하신 방법으로 구현하는 것으로 알고 있습니다.
테마 파일에 같이 첨부된 테마컨트롤.cs가 따로 있어서
이 걸 이용하면 될 것 같습니다. 컨트롤.cs 내용은 아니지만 View 전환을 ioc를 이용해서 사용하는 것 같더라구요.
( 아직은 왜 MVVM을 위반했는지, 어떻게 MMVM을 유지했는지 에 대해 잘 이해가 안되지만 )
처음엔 basedOn으로 상속받는 걸 Dynamic으로 받으면 되질 않을까 했습니다. (상속시 에는 부모가 명시?되어야해서) staticResource로 받아야 되더군요.
그래서 시도 한게 MainWindow.xaml에서 Style을 DynamicResource로 받고
테마 당 각 하나씩 Style을 만들어서 할당 했습니다.
테마를 변경되는 것을 테스트 했고 MVVM을 위반된 걸 확인 했으니 이 부분만 잡으면 될 것 같습니다.
다핸히 간단한 프로그램이라 큰 성능문제는 없네요
05/26 기록
이해는 안되는데 정보는 많아서 복잡하네요 어떤게 좋은지 , 문제가 되는지 고민이 됩니다.
2가지 방안을 실행했습니다.
MainViewModel에서 IoC로 ThemesViewModel을 컨트롤 한다.
(MainViewModel를 거치지 않고) ViewModelLocater를 이용하여 ThemesViewModel로 연결합니다.
ThemesViewModel 내부에 RealyCommand를 구현하여 실행합니다.
(MainWindowViewMode)
IoC를 이용하여 Button 동작 부를 사진과 같이 설정 했습니다.
하고나니 버튼 커맨드 자체를 ThemesViewModel에 넘겨서 실행이 가능 할 것 같았습니다.