2017-01-19 14 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これらのボタンは、2番目または3番目のビューモデルにロードすると表示されます。

とにかく、私は現時点でアイデアが新鮮だから、どんなアイデアもインスピレーションに役立つだろう!前もって感謝します。

編集:コンストラクタでさらに掘削した後

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

コンストラクタ内のメッセージを購読しましたか? – jannagy02

+0

@ jannagy02私はお詫びします...私はコメントがあったのか分かりませんでした。私はコンストラクタに簡単なメッセンジャー登録を登録しました。ラインは上です。もう一度、SecondViewモデルに切り替えるとメッセージを受け取ります。 –

答えて

0

を登録 SecondViewModel登録の下に追加されました

SecondViewModel、SecondViewModel二回インスタンス化されました。それは私の元のViewModelLocatorが上記のコードの外に新しいインスタンスを作成していたことを認識させました。 ViewModelLocatorを代わりにMainViewModelのインスタンスを指すように変更します。 :)

誰も正式には助けられませんでしたが、間接的に協力してくれたSOコミュニティに感謝したいと思います! :D

関連する問題