我有一个MVVM运行树视图。在顶层是包含凭据的Account对象。我有一个PasswordBox,可用于更改帐户密码,后面有一个Save按钮。代码如下,是帐户级别模板的一部分:
PasswordBox Width="100" x:Name="pbPassword"/>
Button x:Name="btnSave" Command="{Binding ClickCommand}" CommandParameter="{Binding ElementName=pbPassword, Path=Password}" Height="20" Width="50">Save
我在PasswordBox中添加了一些内容,然后单击“保存”。触发ClickCommand,但参数始终为string.Empty。我错过了什么?
答案 0 :(得分:9)
出于安全原因,WPF不为PasswordBox的Password属性提供依赖项属性(引用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;
}
您可能需要考虑其他不涉及将密码作为纯文本保存在内存中的选项。
希望这有帮助,
本
答案 1 :(得分:-2)
- 请停止在此标记我,请参阅下面的评论,这不起作用,但留在这里没有其他人犯同样的错误 -
对不起老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);
}
从命令中了解ui