MVVM WAYでWindows Universalアプリの条件付きナビゲーション/リダイレクトを実装する方法
-
21-12-2019 - |
質問
ログインを含むWindows Universalアプリを持っています。 この種のアプリケーションを持つ典型的なシナリオは異なる状態です。例えば、ユーザーが初めてログインしていないか、またはユーザーがすでにログインしているか、もう一度アプリを再度開くだけです。ここの状態に応じてアクション
がありますifloggedin - ショーホームページ ||. ifnotloggedin - LoginPage
を表示現在の条件(状態)に基づいて、さまざまなページを表示する必要があります。
私の質問はこのしかし、私はMVVMで同じ実装方法とこの条件付きロジックを配置するための適切な場所は何ですか。
app.xaml.csに置くことは問題を解決しますが、app.xaml.csをめくると、ViewModelはインタラクションロジックを処理していないためMVVMに違反します。
私が試した解決策は
- 中間ページ(中間; xaml)を作成します。
- 上記のために対応するViewModel(intermiateViewModel.cs)を作成します。
- このViewModelのコンストラクタでは、ナビゲートするページを決定するための条件付きステートメントを組み込んでいます。
BOOL変数に私の状態を持っていると仮定しましょう。条件付きチェックを入れる場所?
My InteriateViewModelのコードは次のとおりです
public bool IsLoggedIn {get; set;}
//IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in
public IntermediateViewModel()
{
if (IsLoggedIn == false)
{
NavigationService.Navigate("LoginPage");
}
else if (IsLoggedIn == true)
{
NavigationService.Navigate("HomePage");
}
}
.
この解決策の問題は、あなたにあなたのバックスタックにもう1ページ(中間のxaml)を持っています。これを取り除く方法はありますか?
これと同様の解決策は、Windows Universal Apps(Windows 8.1 / Windows Phone 8.1)に関連しているようです。
解決
well、この場合、ビューが選択される前にこれが起こるべきであるためMVVMは保持されません。ロジックを含むクラス( 'Navigator
'または任意のもの)を作成しないでください。?このようにしてあなたはあなたのロジックをアプリクラスの外に保ち、それにやるべきことはほとんどありません。