0

私はMVVMパターンの新人です。

ビューには、ログインボタンと進行状況バーがあります。

LoginViewModelというビューモデルがあります。これは、コマンドLoginCommandを公開し、ビューLoginPage.xamlに接続されています。

ログインコマンドを実行すると、ログインボタンが無効になり、進行状況バーが表示されます。

ログインに失敗した場合は、[ログイン]ボタンが有効になり、進行状況バーが非表示になります。

私が確信していないのは、このプレゼンテーションロジックがどこで発生するかです。ビューモードで発生する必要がありますか、それともページの背後にあるコードで発生する必要がありますか?

現在、ログインプロセスの開始時にtrueに設定され、失敗した場合はfalseに設定されたLoggingInというビューモデルにブールプロパティがあります。このブール値は、ボタンとプログレスバーのそれぞれIsEnabledプロパティとVisibilityプロパティにフックされています。

これは私には間違っていると感じたので、OnBeginLoginとOnEndLoginのいくつかのイベントを作成し、これらをページの後ろのコードに接続して、コントロールの視覚的な状態を制御するコードを試してみました。ただし、これには以前のソリューションよりもはるかに多くのコードが必要でした。

また、ビューモデルから視覚的な状態を制御できるように、コントロールに固有の2つのプロパティLoginButtonEnabledとProgressBarVisibleを公開することもできます。ただし、キャンセルボタンを追加する場合は、CancelButtonEnabledという別のプロパティを追加する必要があります。

ビューモデルでプレゼンテーションロジックを処理するべきではないと思うので、イベントを追加するのが最善の解決策のようですが、それを行うためのベストプラクティスまたは標準/一般的な方法は何ですか?

また、ログインが成功した場合、ユーザーを前のページまたは別のページに戻すことは、ビューモデルまたはページの後ろのコードで処理する必要がありますか?繰り返しになりますが、これはビューモデルには当てはまらないと思いますが、よくわかりません。

ご協力いただきありがとうございます。

4

1 に答える 1

1

なぜそれがあなたにとって間違っていると感じるのかはわかりませんが、あなたの最初のアプローチが私にとって最も正しいようです。ビューモデルは、アプリケーションの状態をビューに正しく公開しており、データバインディングを使用して、これがプレゼンテーションにどのように変換されるかを制御しています。

于 2013-03-24T21:00:40.870 に答える