ホームページ >バックエンド開発 >C++ >WPF で PasswordBox を ViewModel に安全にバインドするにはどうすればよいですか?

WPF で PasswordBox を ViewModel に安全にバインドするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-23 15:26:09771ブラウズ

How to Securely Bind a PasswordBox to a ViewModel in WPF?

WPF MVVM モードで PasswordBox を安全にバインドする: 詳細な手順

MVVM アーキテクチャで PasswordBox をバインドするとセキュリティの問題が発生しますが、安全で信頼性の高いバインド方法を実現できます。一般的な手法は、http://www.wpftutorial.net/PasswordBox.html で提供されているコード例で説明されています。

PasswordBox バインドの練習

このテクノロジーの実装について詳しく見ていきましょう。 ViewModel にユーザー名とパスワードのプロパティが含まれていると仮定します。ユーザー名を TextBox にバインドするのは非常に簡単ですが、パスワードを PasswordBox にバインドするには若干の変更が必要です。

提供されたコードを使用すると、XAML に PasswordBox を含めることができます:

<code class="language-xml"><passwordbox ff:passwordhelper.attach="True" ff:passwordhelper.password="{Binding Path=Password}" width="130"></passwordbox></code>

この設定では、次のコードは ViewModel での Command プロパティの使用を示しています。

<code class="language-csharp">private DelegateCommand loginCommand;

public string Username { get; set; }
public string Password { get; set; }

public ICommand LoginCommand
{
    get
    {
        if (loginCommand == null)
        {
            loginCommand = new DelegateCommand(Login, CanLogin);
        }
        return loginCommand;
    }
}

private bool CanLogin()
{
    return !string.IsNullOrEmpty(Username);
}

private void Login()
{
    bool result = securityService.IsValidLogin(Username, Password);
}</code>

隠しステップ?

上記のコードはバインドを保証しますが、PasswordBox バインドには見落とされがちな重要な手順があります。 XAML を検査すると、TextBox のユーザー名バインディングは期待どおりに機能しますが、PasswordBox のパスワード バインディングは ViewModel プロパティを更新しないことがわかります。

秘密アシスタント

実際には、ヘルパー クラスにブレークポイントを設定し、コードが実行されたものの、ViewModel の Password プロパティの更新に失敗したことを確認しました。ここで重要なステップが抜けています。

手動バインディング

実装を完了するには、PasswordBox と ViewModel の間で接続を確立する必要があります。コードビハインド ファイルで、PasswordBox の PasswordChanged イベントのハンドラーを定義します:

<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
    if (this.DataContext != null)
    {
        ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword;
    }
}</code>

安全方法

ViewModel で SecureString プロパティを定義し、PasswordChanged イベントを処理することにより、MVVM 原則を維持しながらパスワード値を安全に取得できます。このアプローチにより、セキュリティ ガイドラインへの違反が回避され、ビューとビューモデルの間の明確な分離が維持されます。

以上がWPF で PasswordBox を ViewModel に安全にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。