2017-01-19 4 views
0

WPF 응용 프로그램의 기본 창을 보유하고 현재 viewmodel 개체를 기반으로 한 프레임의보기를 전환하는 기본 viewmodel이 있습니다. 뷰 모델 간을 전환하려면 List의 기본이 아닌 뷰 모델이 있어야합니다.MVVMLight 메신저 메시지를 수신하지 못했습니다.

private IPageViewModel currentPageViewModel; 
private List<IPageViewModel> pageViewModels; 

//Add pages 
PageViewModels.Add(new FirstViewModel(dataService, storageService)); 
PageViewModels.Add(new SecondViewModel(dataService, storageService)); 
PageViewModels.Add(new ThirdViewModel(dataService, storageService)); 

//Set initial page 
CurrentPageViewModel = PageViewModels[0]; 

첫 번째 "현재"viewmodel 개체는 처음 프로그램을 시작할 때로드되는 개체입니다. FirstViewModel을 통해 메시지를 보내고 SecondViewModel으로 접수합니다. 문제는 적어도 적어도 한 번 변경하여 SecondViewModel에 도달 할 때까지 메시지를받지 못한다는 것입니다.

SecondViewModel이 메시지를 받기 위해 아직 인스턴스화되지 않은 것이 분명하지만 나는 세계에서 그렇지 않은 것이 확실합니다.

보너스 정보와 질문 ... 내가보기/viewmodels를 변경할 때마다, 그것은 다른 페이지를 ... 생성

<Frame x:Name="DisplayAreaFrame" Content="{Binding CurrentPageViewModel}" /> 

MainWindow.xaml에서보기 밖으로 변경됩니다 곳입니다 .. 그것은을 겉으로보기에는 직접적으로 변하지 않습니다. 대신, 앞뒤로 뒤집을 수있는 ... 페이지 (?)를 추가합니다. Navigation Buttons이 버튼은 두 번째 또는 세 번째보기 모델에로드 한 후에 만 ​​나타납니다.

어쨌든, 나는 지금 생각에서 신선한 것이므로 어떤 아이디어라도 도움이되는 영감 일 수 있습니다! 미리 감사드립니다.

편집 : 더 파고 후 생성자

Messenger.Default.Register<String>(this, id => {handleSelectedMessage(id);}); 
+0

생성자의 메시지를 구독하셨습니까? – jannagy02

+0

@ jannagy02 사과드립니다 ... 의견이 있다는 것을 몰랐습니다. 나는 생성자에 간단한 메신저 등록을 등록했다. 줄은 위입니다. 다시 한 번, SecondViewModel으로 전환하면 메시지를받습니다. –

답변

0

에 SecondViewModel 등록

SecondViewModel가 등록 아래에 추가 가의 SecondViewModel 두 번 인스턴스화. 그게 내 원래의 ViewModelLocator 위의 코드 외부에 새 인스턴스를 만드는 걸 깨닫게했다. ViewModelLocator 대신 MainViewModel의 인스턴스를 가리 키도록 변경하십시오. :)

아무도 공식적으로 도움을받지 못했지만 간접적으로 도움을 주신 SO 커뮤니티에 감사드립니다. : D