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 サイトの他の関連記事を参照してください。