检查WPF中PasswordBox是否有用户输入

3

我正在使用PasswordBox,希望在用户输入时检测到任何内容,如果是,则需要将按钮状态更改为启用。如何检查用户是否在PasswordBox中键入了任何内容?

PasswordBox的行为与TextBox不同,因为您无法将其绑定到文本,当用户键入任何内容时会引发某些事件。有什么想法吗?

我已尝试以下代码,但出现错误:

<PasswordBox>
    <i:Interaction.Triggers>
        <EventTrigger EventName="KeyDown">
            <si:InvokeDataCommand Command="{Binding MyCommand}" />
        </EventTrigger>
    </i:Interaction.Triggers>  
</PasswordBox>
2个回答

5
您可以使用PasswordChanged事件,该事件在密码框中的字符串更改时触发:
XAML部分:
<PasswordBox Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" />
<Button Name="someButton" IsEnabled="False" Click="someClickEvent" />

C# 部分:

    private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        somebutton.IsEnabled = String.IsNullOrWhiteSpace(pwdBox.Password));
    }

请注意MSDN中的说明:
当您获取Password属性值时,在内存中以明文形式暴露密码,这可能存在安全风险。为避免此风险,请使用SecurePassword属性以SecureString形式获取密码。
因此,以下代码可能更可取:
    private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        btn.IsEnabled = pwdBox.SecurePassword.Length == 0;
    }

如果您只能访问viewModel,则可以使用附加属性,例如创建可绑定的密码或安全密码,如此示例所示。


谢谢mcy +1,问题在于我在视图cs中没有模型视图的实例,有没有办法在模型视图本身调用此事件?您可以看到我已尝试使用更新的问题。 - Jean Tehhe
这是一个很好的答案。它比被接受的答案简单得多。此外,如果按钮默认启用,您可以在代码后台构造函数中添加调用:pwdBox_PasswordChanged(“”,new RoutedEventArgs()),并假设pwdBox为空(应该是这样),它将在页面打开时将其设置为未启用状态。 - nanonerd

3
您可以像这样使用Interactions通过PasswordChanged事件:PasswordChanged

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
}

一些有用的链接

WPF教程中的密码框(PasswordBox)

使用MVVM模式绑定WPF中的密码框(PasswordBox)

如何在MVVM中绑定密码框(PasswordBox)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接