Привязка WPF CommandParameter к PasswordBox.Пароль:
У меня есть MVVM run treeview. На верхнем уровне находится объект Account, содержащий учетные данные. У меня есть пароль, который можно использовать для изменения пароля учетной записи с помощью кнопки сохранения прямо за ним. Код выглядит следующим образом и является частью шаблона учетной записи:
PasswordBox Width="100" x:Name="pbPassword"/>
кнопка x: Name=" btnSave "Command=" {Binding ClickCommand} "CommandParameter=" {Binding ElementName=pbPassword, Path=Password} "Height=" 20 "Width=" 50 " >сохранить
Я положил что-то в PasswordBox, а затем нажмите кнопку Сохранить. С кнопкой пожаров, но параметр всегда является строкой.Пустой. Что я упускаю?
2 ответов
по соображениям безопасности WPF не предоставляет свойство зависимостей для свойства Password PasswordBox (ссылка 1, 2), поэтому привязка параметров команды не работает.
вы можете привязать аргумент команды к PasswordBox, а затем получить доступ к соответствующему свойству из вашей реализации команды:
<Button Command="{Binding ClickCommand}" CommandParameter="{Binding ElementName=pbPassword}">
// command implementation
public void Execute(object parameter)
{
var passwordBox = (PasswordBox)parameter;
var value = passwordBox.Password;
}
вы можете рассмотреть другие варианты, которые не связаны с сохранением пароля в памяти как простой текст.
надеюсь, это поможет,
Бен!--6-->
--пожалуйста, прекратите отмечать меня на этом, см. комментарий ниже, это не работает, но оставил так, что никто больше не делает ту же ошибку--
извините старый Q, но нашел улучшение на этом
<Button Content="Log On"
Command="{Binding LogOnCommand}"
CommandParameter="{Binding ElementName=PasswordControl, Path=SecurePassword}" />
таким образом, ваша команда должна знать только об объекте SecureString
public override void Execute(object parameter)
{
_viewModel.LogOnAsync((SecureString)parameter);
}
сохранение знаний пользовательского интерфейса из команды