Me he encontrado con un problema con la unión a un P asswordBox. Parece que es un riesgo de seguridad, pero estoy usando el patrón MVVM, así que deseo evitarlo. Encontré un código interesante aquí (¿alguien ha usado esto o algo similar?)
http://www.wpftutorial.net/PasswordBox.html
Técnicamente se ve muy bien, pero no estoy seguro de cómo recuperar la contraseña.
Básicamente tengo propiedades en mi LoginViewModelpara Usernamey Password. Usernameestá bien y funciona como es un TextBox.
Usé el código anterior como se indicó e ingresé esto
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Cuando tuve el PasswordBoxcomo TextBoxy Binding Path=Passwordentonces la propiedad en mi LoginViewModelfue actualizado.
Mi código es muy simple, básicamente tengo un Commandpara mi Button. Cuando presiono se CanLoginllama y si devuelve verdadero, llama Login.
Puedes ver que reviso mi propiedad Usernameaquí, lo que funciona muy bien.
En Loginenvío a lo largo de mi servicio una Usernamey Password, Usernamecontiene datos de mi View, pero PasswordesNull|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 { }
}
Esto es lo que estoy haciendo
<TextBox Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
MinWidth="180" />
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Tengo mi TextBox, esto no es problema, pero en mi ViewModelel Passwordusuario está vacía.
¿Estoy haciendo algo mal o me falta un paso?
Puse un punto de interrupción y, efectivamente, el código ingresó a la clase auxiliar estática, pero nunca actualiza mi Passworden mi ViewModel.