ログインページがあり、ログインボタンをビューモデルのコマンドにバインドしています。このページから、ホームページである他のユーザー コントロールに移動したいと考えています。
ビューとビューモデル間のバインディングを使用してこれを行うことは可能ですか?
ログインページがあり、ログインボタンをビューモデルのコマンドにバインドしています。このページから、ホームページである他のユーザー コントロールに移動したいと考えています。
ビューとビューモデル間のバインディングを使用してこれを行うことは可能ですか?
これは良い質問です。そもそもMVVMを使用する理由を忘れないようにしましょう。MVVMの良いところは、表示されるデータを表示コードから分離できることです。うまくいけば、これを行うことで、アプリケーションのテストが簡単になり、WinRTなどの別のUIをスラップして動作させることができます。
要件は次のとおりです。
ただし、NavigationServiceを使用する場合、ユーザーが戻るボタンを押すと、ログオンページに戻りますが、これはおそらく望ましくありません。
この場合、アプリケーションページ全体をオーバーレイするポップアップを表示することをお勧めします。次に、資格情報が確認されたらポップアップを閉じます。
View-FirstとViewModel-Firstのどちらを使用するかによって、構造が異なります。ViewModelの最初のアプローチは次のとおりです。
LogonViewModel logon = new LogonViewModel();
logon.LogonSucceeded += () =>
{
App.DismissViewFor<LogonViewModel>(logon);
AppViewModel appViewModel = new AppViewModel();
App.ShowViewFor<AppViewModel>(appViewModel);
}
App.ShowViewFor<LogonViewModel>(logon);
独自のフレームワークをロールしてApp.DismissViewFor、App.ShowViewForを実装するか、ViewLocatorを提供するCaliburn.Microのようなフレームワークを使用できます。