Je suis venu à travers un problème avec la liaison à un P asswordBox
. Il semble que ce soit un risque pour la sécurité, mais j'utilise le modèle MVVM, donc je souhaite contourner cela. J'ai trouvé un code intéressant ici (quelqu'un a-t-il utilisé ceci ou quelque chose de similaire?)
http://www.wpftutorial.net/PasswordBox.html
Techniquement, il a fière allure, mais je ne sais pas comment récupérer le mot de passe.
J'ai essentiellement des propriétés dans mon LoginViewModel
pour Username
et Password
. Username
est bien et fonctionne comme c'est un TextBox
.
J'ai utilisé le code ci-dessus comme indiqué et entré ce
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Quand je l' ai eu PasswordBox
comme TextBox
et Binding Path=Password
puis la propriété dans mon LoginViewModel
été mis à jour.
Mon code est très simple, en gros j'ai un Command
pour moi Button
. Lorsque j'appuie, il CanLogin
est appelé et s'il renvoie vrai, il appelle Login
.
Vous pouvez voir que je vérifie ma propriété Username
ici, ce qui fonctionne très bien.
Dans Login
j'envoie à mon service un Username
et Password
, Username
contient des données de mon View
mais Password
estNull|Empty
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);
if (result) { }
else { }
}
C'est ce que je fais
<TextBox Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
MinWidth="180" />
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
J'ai mon TextBox
, ce n'est pas un problème, mais dans mon ViewModel
le Password
est vide.
Suis-je en train de faire quelque chose de mal ou de manquer une étape?
J'ai mis un point d'arrêt et bien sûr le code entre dans la classe d'assistance statique mais il ne met jamais à jour mon Password
dans mon ViewModel
.