2011-05-03 6 views
0

다른 뷰 설정이 있고 viewmodel을 기다리고 준비 중입니다. 내 RelayCommand가 "현재"뷰 모델에 도착합니다. 현재 뷰 모델에서 새 뷰를 표시하는 가장 좋은 방법은 무엇입니까?mvvm-Light : 현재 Viewmodel에서 다른보기를 표시하고 내 viewmodel에서보기를 닫습니까?

나는 읽고 있는데, 내 viewmodel에서 메시지를 보내려면 메신저를 사용해야 나타납니다 ??? 내보기와 관련된 내 새로운 viewmodel 내가 보여주고 싶은가 ?? ...,하지만 어떻게 내가보기를 보여줄까요 ??

누구에게 내가해야 할 일에 대한 좋은 예가 있습니까?

또한 뷰 모델에서보기를 닫을 수있는 방법이 있습니다. 나는 mvvm-light가 테이블에 여분의 것을 가져다 주는지 궁금하다. 즉 뷰를 닫도록 뷰 모델을 강제하는 트리거?

어떤 도움이 정말 WPF에서

감사

+0

사용하시는 WPF 또는 실버 라이트입니까? – AbdouMoumen

+0

현재 WPF가 있지만 실버 라이트와 동일한 기능이 필요했습니다. – Martin

답변

3

감사, 당신은 "보여주는"/ "폐쇄"뷰에 대한 두 가지 방법 (상자 밖으로)가 있습니다. 첫 번째는 간단히 말해서 .Show() 또는 .ShowDialog() 메소드를 통해 창 또는 대화 상자를 표시하고 .Close() 메소드로 닫을 수 있습니다. 이 경우 MVVMLight Messenger 클래스를 사용하여 언급 한대로보기/닫기 메시지를보기에 분리 된 방식으로 보낼 수 있습니다. 여기에 "closing"예제가 있습니다. 보기의 코드 숨김에서

CloseTheView() 
{ 
    Messenger.Default.Send(new CloseTheViewMessage); 
} 

: 뷰 모델에서

//Constructor 
public TheView() 
{ 
    ... 
    Messenger.Default.Register<CloseTheViewMessage>(() => this.Close()); 
} 

당신이 볼 수 있듯이,이 코드 숨김 파일에 일부 코드를 포함하지 않습니다,하지만 더있어 큰 문제는 기능의 단 한 줄이기 때문입니다.

두 번째 방법은 탐색 프레임 워크 (WPF와 Silverlight에서 모두 사용 가능)을 사용하는 것입니다. 주 Window (또는 UserControl) 인 "쉘"을 정의하고 frame을 내부에 넣고 다른보기를 Page에서 상속 한 다음 NavigationService의 인스턴스를 사용하여 ViewModel에서 탐색을 시작합니다 Frame (또는 직접 페이지 자체와 연결된 하나).

희망이 있습니다.