2014-04-19 7 views
1

이것은 바보 같은 질문을해야합니다 전망,하지만 난 대답을 찾을 수 없습니다. 내 응용 프로그램에는 MainWindow에 Viewmodel과 childviews와 해당 viewmodels가 있습니다. 하위 viewModel에서 mainWindow ViewModel에 정의 된 명령을 실행해야합니다. 내가 자식보기를 만들 때 IoC를 사용하고 mainWindow ViewModel에 대한 참조를 전달해야한다는 것을 알았지 만, 어떻게해야할지 모르겠다! 내가이가 뒤에 아이 뷰의 코드에서MainWindow를 뷰 모델의 참조

private readonly Main_ViewModel _mainVM; 
public VM_ListadoClientes(Main_ViewModel MainVM) 
    { 
     _mainVM = MainVM; 
    }   

:

private VM_ListadoClientes viewModel = new VM_ListadoClientes(???); 

    public ViewClientes() 
    { 
     InitializeComponent(); 
     this.Loaded += (s, e) => { this.DataContext = this.viewModel; }; 
    } 

그래서 내가 어떻게 "뷰 모델은에서 통과 MainWindow를 할 수있는 참조를받을 수 있나요 ??? 아이의 ViewModel 생성자에 나는이 있습니다 " 매개 변수?

또한이 중단 MVVM 패턴을합니까? 자식 뷰는 메인 윈도우 뷰 모델 존재를 인식하고 있기 때문입니다.

감사합니다.

UPDATE

내가 EventAggregator 클래스로이 시도 :

class EventAggregator 
{ 
    public static void BroadCast(string message)    
    { 
     if (OnMessageTransmitted != null) 
      OnMessageTransmitted(message); 
    } 

    public static Action<string> OnMessageTransmitted;   
} 

하지만 난 정적 인 생각을 좋아하지 않아, 느릅 나무 그래서 모든 응용 프로그램에 일반적인 의미. 어쩌면 내가 특정 viewModel 로컬 만들 수 있지만이 이벤트에 자식 뷰를 구독하려면 어떻게합니까? 감사합니다

+0

ViewModel을 매개 변수로 받아들이는 'ViewClientes'의 오버로드 된 생성자를 생성하십시오. 두 개의 ViewModel이 느슨하게 결합되도록 Mediator 패턴 또는 EventAggregator를 사용하는 것이 가장 이상적입니다. –

+0

감사합니다. EventAggregator의 기본 예제를 제공 할 수 있습니까? 내 업데이트를 참조하십시오! 감사! – ericpap

+0

왜'EventAggregator'를 만드나요? PRISM은 이미 그것을 정의했습니다. 예제 [here] (http://www.codeproject.com/Articles/355473/Prism-EventAggregator-Sample), [here] (http://www.gonetdotnet.info/posts/wpf-articles/wpf)를 참조하십시오. -module-communication) 및 [here] (http://msdn.microsoft.com/en-us/library/ff921122.aspx)를 참조하십시오. –

답변

0

내가 해킹 등 등 메시징, 이벤트 수집기를 고려하고 그들이 당신의 응용 프로그램이 매우 관리하기 어려운 것. 왜 솔리드 솔루션을 사용하지 않습니까? Catel을 사용하는 것이 좋으며 몇 가지 이유가 있습니다.

1) 응용 프로그램 전체 명령을 입력 제스처에 등록 할 수있는 CommandManager 클래스를 제공합니다. 이것은 다음과 같이 XAML에서 바인딩 할 수 있습니다 : 당신이 원하는 목적지

<Button Command="{catel:CommandManagerBinding File.Exit}" /> 

그런 다음 당신은이 명령을 실행 할 수 있으며이 서비스를 통해 당신을 위해 올바른 VM에 전달됩니다.

2) 별도의 뷰 모델을 사용하여 nested user controls을 처리 할 수있는 견고한 기초가 있습니다.

3) MVVM 및 XAML을 사용할 때 응용 프로그램에 필요한 모든 것을 제공하십시오.

관련 문제