Привязка 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);
}

сохранение знаний пользовательского интерфейса из команды