Lier en toute sécurité PasswordBox en mode WPF MVVM : étapes détaillées
La liaison de PasswordBox dans l'architecture MVVM entraînera des problèmes de sécurité, mais une méthode de liaison sûre et fiable peut être obtenue. Une technique courante est illustrée dans l'exemple de code fourni sur http://www.wpftutorial.net/PasswordBox.html.
Pratique de liaison PasswordBox
Plongeons-nous dans la mise en œuvre de cette technologie. Supposons que le ViewModel contient des propriétés de nom d'utilisateur et de mot de passe. Lier le nom d'utilisateur à TextBox est très simple, mais lier le mot de passe à PasswordBox nécessite quelques modifications.
En utilisant le code fourni, vous pouvez inclure une PasswordBox en XAML :
<code class="language-xml"><passwordbox ff:passwordhelper.attach="True" ff:passwordhelper.password="{Binding Path=Password}" width="130"></passwordbox></code>
Avec cette configuration, le code suivant illustre l'utilisation de la propriété Command dans un ViewModel :
<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>
Des étapes cachées ?
Bien que le code ci-dessus garantisse la liaison, il existe une étape critique dans la liaison de PasswordBox qui est souvent négligée. Lors de l'inspection du XAML, vous verrez que la liaison du nom d'utilisateur de TextBox fonctionne comme prévu, mais la liaison de mot de passe de PasswordBox ne met pas à jour la propriété ViewModel.
Assistant secret
En fait, vous définissez un point d'arrêt dans la classe d'assistance, confirmant que le code s'est exécuté mais n'a pas réussi à mettre à jour la propriété Mot de passe du ViewModel. C’est là qu’il manque une étape cruciale.
Reliure manuelle
Pour terminer l'implémentation, une connexion doit être établie entre PasswordBox et ViewModel. Dans le fichier code-behind, définissez un gestionnaire pour l'événement PasswordChanged de PasswordBox :
<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (this.DataContext != null) { ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword; } }</code>
Méthode de sécurité
En définissant une propriété SecureString dans le ViewModel et en gérant l'événement PasswordChanged, vous pouvez récupérer en toute sécurité la valeur du mot de passe tout en conservant les principes MVVM. Cette approche évite de violer les directives de sécurité et maintient une séparation claire entre les vues et les ViewModels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!