Maison > développement back-end > C++ > Comment lier en toute sécurité un PasswordBox à un ViewModel dans WPF ?

Comment lier en toute sécurité un PasswordBox à un ViewModel dans WPF ?

Mary-Kate Olsen
Libérer: 2025-01-23 15:26:09
original
768 Les gens l'ont consulté

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

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal