이것은 바보 같은 질문을해야합니다 전망,하지만 난 대답을 찾을 수 없습니다. 내 응용 프로그램에는 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 로컬 만들 수 있지만이 이벤트에 자식 뷰를 구독하려면 어떻게합니까? 감사합니다
ViewModel을 매개 변수로 받아들이는 'ViewClientes'의 오버로드 된 생성자를 생성하십시오. 두 개의 ViewModel이 느슨하게 결합되도록 Mediator 패턴 또는 EventAggregator를 사용하는 것이 가장 이상적입니다. –
감사합니다. EventAggregator의 기본 예제를 제공 할 수 있습니까? 내 업데이트를 참조하십시오! 감사! – ericpap
왜'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)를 참조하십시오. –