Я прочитал несколько статей о том, как использовать Приложенные Свойства для привязки со значением PasswordBox в WPF. Однако каждая статья также ссылается на документацию.NET, которая объясняет, почему PasswordBox не был сделан связываемым во-первых.
Я не считаю меня специалистом по безопасности каким-либо образом, но я полагаю, что кто-то в Microsoft знал то, что они делали, и я не должен выдвигать усилие, пытающееся отменить ее.
Так, вместо этого, я предложил свое собственное решение.
public class LoginViewModel
{
// other properties here
public PasswordBox Password
{
get { return m_passwordBox; }
}
// Executed when the Login button is clicked.
private void LoginExecute()
{
var password = Password.SecurePassword;
// do more stuff...
}
}
Затем в моем XAML я просто представляю PasswordBox путем привязки поля Password с a ContentPresenter
.
Таким образом, мой вопрос... существует ли проблема с выполнением его этот путь? Я понимаю, что я - вид повреждения MVVM способом, позволяя фактическим средствам управления появиться в моем ViewModel, но по крайней мере это кажется более корректным, чем просто необеспечение поля пароля.
Если это - на самом деле, проблема, кто-либо предложил решение, которое не включает использование Приложенные Свойства и хранение пароля в ViewModel?
Спасибо!-J
Что плохого в хранении пароля в виртуальной машине, по крайней мере, пока он необходим во время входа в систему? Вы правы, что согласно шаблону MVVM виртуальная машина не должна иметь ссылки на элемент управления, такой как PasswordBox.
В представлении добавьте обработчик события PasswordChanged. В обработчике обновите свойство SecureString на виртуальной машине с помощью SecurePassword ящика паролей.
это всего лишь мнение, надеюсь, оно может вам помочь.
Учтите это в своем коде:
void loginButton_Clicked(object s, EventArgs e)
{
myViewModel.Password = txPwdBox.Password;
myViewModel.Login();
}
Мне нравится ваша идея.
Да, здесь вы нарушаете передовой опыт ViewModel, но
Будет ли здесь нарушение барьера View / ViewModel проблемой для вас или нет, зависит от , почему вы в первую очередь используете ViewModels (например, разделение задач, модульное тестирование, возможность повторного использования), поэтому Я не могу на это ответить.