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 LoginViewModelpour Usernameet Password. Usernameest 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 PasswordBoxcomme TextBoxet Binding Path=Passwordpuis la propriété dans mon LoginViewModelété mis à jour.
Mon code est très simple, en gros j'ai un Commandpour moi Button. Lorsque j'appuie, il CanLoginest appelé et s'il renvoie vrai, il appelle Login.
Vous pouvez voir que je vérifie ma propriété Usernameici, ce qui fonctionne très bien.
Dans Loginj'envoie à mon service un Usernameet Password, Usernamecontient des données de mon Viewmais PasswordestNull|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 ViewModelle Passwordest 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 Passworddans mon ViewModel.