0

WindowsPhone7アプリでMVVMを使用しようとしています。私はこれをどのように行うべきかについて少し混乱しています。

Webブラウザでナビゲートするためのコードビハインドイベントがあります。これで、このイベントは最終的に、GoogleoAuthを使用してユーザーをログインさせるメソッドを呼び出します。

これで、Googleへのログインメソッドを呼び出すコードがサービスレイヤーにあります。サービスレイヤーを呼び出すVMでプロパティを作成する必要があるのか​​、それともコードビハインドページでサービスレイヤーオブジェクトを直接作成して直接呼び出す必要があるのか​​わかりません。

行くための最良の方法は何ですか?

編集

これが私がしたことです

//コードビハインド

   private void wbGoogle_Navigating(object sender, NavigatingEventArgs e)
        {
            var queryParmas = e.Uri.ParseQueryString();

            var code = queryParmas.ToList().Where(x => x.Key == "code").FirstOrDefault();

            if (!code.Equals(new KeyValuePair<string, string>()))
            {
                loginVm.AuthenticateUser(code.Value, TestCallBack);
            }
        }

 private void TestCallBack(Authorization a)
        {
            var d = a;
            // maybe assign "a" to some property back in the VM.
        }

// Vm

public void AuthenticateUser(string code, Action<GoogleContacts.Model.Authorization> CallbackOnSuccess)
    {
        loginService.SendCode(code, CallbackOnSuccess);
    }

//サービスレイヤー

  public void SendCode(string code, Action<Authorization> CallbackOnSuccess)
        {
            var request = new RestRequest(TokenEndPoint, Method.POST);
            request.AddParameter("code", code);
            request.AddParameter("client_id", ClientId);
            request.AddParameter("client_secret", SecretKey);
            request.AddParameter("grant_type", GrantType);
            request.AddParameter("redirect_uri", RedirectUrl);

            client.ExecuteAsync<Authorization>(request, response =>
            {
                CallbackOnSuccess(response.Data);
            });

        }
4

2 に答える 2

0

ビューモデルはビューのモデルであり、すべての論理的な作業が実際に行われる場所です。ビューの役割は、UIに情報を提示し、ユーザー入力を収集することです。ビューによって実行される他のタスクはすべて、コードベースを緊密に結合し始め、メンテナンスの悪夢に終わります。

質問に直接答えるには、ビュー(コードビハインド)が、UI要素がクリックされたという事実をビューモデルのメソッド(コマンドバインディングまたはその他のメカニズム)に渡す必要があります。

次に、VeiwModelが次に何をするかを決定します。特定のWebページに移動するときが来たと判断する場合があります。そのとき、要求されたページに移動するようにビューに通知します。

ViewModelとViewが通信する正確な方法は、使用しているフレームワークと、「ViewModelFirst」または「ViewFirst」のどちらであるかと大きく関係しています。

于 2013-03-12T18:17:14.500 に答える
0

シンプルに保つために...ビューモデルは、アプリのビジネスロジックと頭脳です。ビューはデータの表示のみを処理する必要があります。私は認証を「頭脳」の一部と見なし、それをビューモデルのどこかに置きます。(アプリのニーズに応じて)もう少し洗練されたものになり、認証ログインメソッドをビューモデルの基本クラスに配置することもできます。このようにして、必要に応じて任意のページからログイン呼び出しにアクセスできます。

それをコードの背後に置くと、そのコードがビューと緊密に結合され、再利用しにくくなります。あなたが最高のアーキテクチャを求めているなら、私はそれを避けます。ビューの背後にあるコードに何かを入れても大丈夫です。

コードビハインドを回避するためにMVVMが存在するというコメントには強く反対します。私が使用する経験則は次のとおりです。ビューのコードビハインドの目的は、ビュー/表示機能のみをサポートすることですか?(おそらく、何かをアニメーション化するか、データテンプレートを変更するためにコーディングする必要があります-したがって、その表示を変更します)。ロジックの背後にあるコードは、ディスプレイ固有である必要があります。したがって、このルールにより、ログインは表示固有ではなく、コードビハインドメソッドであってはなりません。

私の2セント

于 2013-03-12T18:17:53.960 に答える