Eu vim através de um problema com a ligação a um P asswordBox. Parece ser um risco à segurança, mas estou usando o padrão MVVM, por isso desejo contornar isso. Encontrei algum código interessante aqui (alguém usou isso ou algo parecido?)
http://www.wpftutorial.net/PasswordBox.html
Tecnicamente, parece ótimo, mas não tenho certeza de como recuperar a senha.
Basicamente, tenho propriedades no meu LoginViewModelfor Usernamee Password. Usernameestá bem e está funcionando como é um TextBox.
Usei o código acima, como indicado, e entrei neste
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Quando eu tinha o PasswordBoxas TextBoxe, em Binding Path=Passwordseguida, a propriedade no meu LoginViewModelfoi atualizada.
Meu código é muito simples, basicamente eu tenho um Commandpara o meu Button. Quando pressiono, CanLoginé chamado e, se retornar verdadeiro, chama Login.
Você pode ver que eu checo minha propriedade Usernameaqui, o que funciona muito bem.
Ao Loginenviar para o meu serviço a Usernamee Password, Usernamecontém dados do meu Viewmas PasswordéNull|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 { }
}
É isso que estou fazendo
<TextBox Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"
MinWidth="180" />
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Eu tenho o meu TextBox, isso não é problema, mas no meu ViewModelo Passwordestá vazio.
Estou fazendo algo errado ou faltando um passo?
Eu coloquei um ponto de interrupção e, com certeza, o código entra na classe auxiliar estática, mas ele nunca atualiza o meu Passwordno meu ViewModel.