我使用PasswordBox
,我想只要检测用户输入有什么,如果是我需要更改按钮状态启用。 我如何检查是否在用户键入任何PasswordBox
?
它表现不同TextBox
,因为你不能将其绑定到文本,当用户键入任何引起了一些事件。 任何想法?
我曾尝试用下面的代码,但我得到的错误:
<PasswordBox>
<i:Interaction.Triggers>
<EventTrigger EventName="KeyDown">
<si:InvokeDataCommand Command="{Binding MyCommand}" />
</EventTrigger>
</i:Interaction.Triggers>
</PasswordBox>
您可以使用PasswordChanged
通过事件Interactions
是这样的:
XAML
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<PasswordBox BorderBrush="#FFB0B1AB"
Width="100"
Height="25"
VerticalAlignment="Bottom">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PasswordChanged">
<i:InvokeCommandAction Command="{Binding PasswordChangedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</PasswordBox>
RelayCommand
private ICommand _passwordChangedCommand = null;
public ICommand PasswordChangedCommand
{
get
{
if (_passwordChangedCommand == null)
{
_passwordChangedCommand = new RelayCommand(param => this.PasswordChanged(), null);
}
return _passwordChangedCommand;
}
}
private void PasswordChanged()
{
// your logic here
}
Some useful links
PasswordBox in WPF Tutorial
Binding to PasswordBox in WPF (using MVVM)
如何绑定到一个MVVM PasswordBox
您可以使用PasswordChanged
它将触发在passwordbox变化的时候,字符串事件:
XAML部分:
<PasswordBox Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" />
<Button Name="someButton" IsEnabled="False" Click="someClickEvent" />
C#部分:
private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
{
if(String.IsNullOrWhiteSpace(pwdBox.Password)
somebutton.IsEnabled = false;
else
somebutton.IsEnabled = true;
}
请注意,MSDN说:
当你的密码属性值,你暴露的密码在内存纯文本。 为了避免这种潜在的安全风险,使用SecurePassword属性来获取密码作为SecureString的。
因此,下面的代码可能是优选的:
private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
{
if (pwdBox.SecurePassword.Length == 0)
{
btn.IsEnabled = false;
}
else
{
btn.IsEnabled = true;
}
}
如果你只能访问视图模型,然后你可以使用附加属性,从而创建一个可绑定密码或securepassword,因为在这个例子中