私は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
にビューが..それを変更されます場所です一見、直接的には変わっていない。代わりに、それは前後に反転することができる...ページ(?)を追加します。 これらのボタンは、2番目または3番目のビューモデルにロードすると表示されます。
とにかく、私は現時点でアイデアが新鮮だから、どんなアイデアもインスピレーションに役立つだろう!前もって感謝します。
編集:コンストラクタでさらに掘削した後
Messenger.Default.Register<String>(this, id => {handleSelectedMessage(id);});
コンストラクタ内のメッセージを購読しましたか? – jannagy02
@ jannagy02私はお詫びします...私はコメントがあったのか分かりませんでした。私はコンストラクタに簡単なメッセンジャー登録を登録しました。ラインは上です。もう一度、SecondViewモデルに切り替えるとメッセージを受け取ります。 –