예제 # 1 : MVVM 애플리케이션에 뷰가 표시되고 (토론 목적으로 Silverlight를 사용하겠습니다) 새 페이지로 이동해야하는 버튼을 클릭합니다.
예 # 2 : 동일한보기에는 클릭 할 때 하위 창 (대화 상자)에서 세부 사항보기를 열어야하는 다른 단추가 있습니다.
우리는 ViewModel에 의해 노출 된 Command 객체가 사용자의 클릭에 반응하는 메소드를 사용하여 버튼에 바인딩 될 것임을 알고 있습니다. 그러나 그때는 무엇입니까? 우리는 어떻게 행동을 완료합니까? 우리가 소위 NavigationService를 사용하더라도 무엇을 말하고 있습니까?
좀 더 구체적으로 말하자면, 웹이나 SL 내장 탐색 프레임 워크와 같은 URL 기반 탐색 체계와 같은 기존의 View-first 모델에서 Command 객체는 다음에 표시 할 View를 알아야합니다. 그것은 패턴에 의해 촉진 된 우려의 분리와 관련하여 선을 넘어가는 것처럼 보입니다.
반면에 버튼이 Command 객체에 연결되어 있지 않고 하이퍼 링크처럼 동작하면 탐색 규칙을 마크 업에 정의 할 수 있습니다. 그러나 뷰가 애플리케이션 흐름을 제어하고 다른 유형의 비즈니스 로직 만 탐색하도록 하시겠습니까? (어떤 경우에는 예라고 말할 수 있고 다른 경우에는 아니오라고 말할 수 있습니다.)
나에게 MVVM 패턴의 유토피아 적 구현 (및 다른 사람들이 이것을 고백한다고 들었다)은 응용 프로그램이 헤드리스 (예 : 뷰 없음)로 실행될 수있는 방식으로 ViewModel을 유선으로 연결하는 것입니다. 이는 코드 기반 테스트를위한 가장 표면적을 제공하고 뷰를 응용 프로그램에서 실제 스킨으로 만듭니다. 그리고 내 ViewModel이 기본 창, 부동 패널 또는 자식 창에 표시되는지 신경 쓰지 않아야합니까?
이 apprach에 따르면 런타임마다 각 ViewModel에 대해 표시해야 할 View를 '바인딩'하는 것은 다른 메커니즘에 달려 있습니다. 그러나 View를 여러 ViewModel과 공유하거나 그 반대로 공유하려면 어떻게해야합니까?
따라서 View-ViewModel 관계를 관리해야하므로 자식 창 / 대화 상자 표시를 포함하여보기 사이를 탐색해야 할 필요가있을 때 무엇을 표시 해야하는지 알 수 있습니다.이를 MVVM 패턴에서 어떻게 실제로 달성합니까?