0

ユーザーがユーザー名/パスワードを入力し、Webサービスが認証して、サーバーから取得した認証トークンを保存するログインページを作成したいと思います。

認証が正常に行われたときにページビューに通知されるようにしたい。

私の質問は:これをMVVMパターンで実装する方法は?モデル用のクラス、モデルビュー用のクラス、およびWebサービスの呼び出しと解析用のクラスを作成しました。

モデルのデータにバインドするコントロールがないため、 ModelViewをページのDataContextとして設定できません。

このパターンはやり過ぎですか、それとも別の方法で実装できますか?提案してください。

ありがとう

4

2 に答える 2

2

ICommandWebサービスの呼び出しを実行するメソッドを指すsをViewModelに配置する必要があります。また、ビュー内の要素は、アクションを実行するためにそれらのコマンドにバインドする必要があります。

また、ビューモデルにもう1つのブールプロパティIsLoggedInが必要です。これは、Webサービスへのログイン呼び出しが成功を返したときにtrueに設定します。

次に、ビューで、IsLoggedInにバインドして、ユーザーにフィードバックを提供できます。

注:セッターでIsLoggedInのPropertyChangedを発生させることを忘れないでください。

于 2012-07-26T10:10:37.417 に答える
2

ここで説明するように実装されたログインページがあります。ログインページ自体にはビューモデルはありませんが、ログインが完了したときにコールバックを含む、私が作成したサービスを使用します。このサービスには、ユーザーに関するその他の役立つ情報も含まれています。ここではMVVMはやり過ぎだったと思います。

    private void LoginButton_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(EmailTextBox.Text)) return;
        if (string.IsNullOrEmpty(PasswordTextBox.Password)) return;

        Login();
    }

    private void Login()
    {
        if (DeviceNetworkInformation.IsNetworkAvailable == false)
        {
            MessageBox.Show("I'm having trouble connecting to the internet." + Environment.NewLine + "Make sure you have cell service or are connected to WiFi then try again");
        }
        else
        {
            LoginButton.Focus(); // Removes the keyboard
            UserProfile.Name = EmailTextBox.Text;
            UserProfile.Password = PasswordTextBox.Password;

            UserProfile.Current.Login(result =>
                {
                    // callback could be on another thread
                    Dispatcher.BeginInvoke(() =>
                        {
                            // Did the login succeed?
                            if (result.Result)
                            {
                                NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
                            }
                            else
                            {
                                string message = "Sorry, but I was not able to log in that user. Please make sure the name and password were entered correctly.";
                                MessageBox.Show(message, "Login failed");
                            }
                        });
                });
        }
    }
于 2012-07-27T14:30:19.207 に答える