检查PasswordBox如果用户在WPF输入任何内容(Check PasswordBox if u

2019-10-19 11:05发布

我使用PasswordBox ,我想只要检测用户输入有什么,如果是我需要更改按钮状态启用。 我如何检查是否在用户键入任何PasswordBox

它表现不同TextBox ,因为你不能将其绑定到文本,当用户键入任何引起了一些事件。 任何想法?

我曾尝试用下面的代码,但我得到的错误:

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

Answer 1:

您可以使用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



Answer 2:

您可以使用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,因为在这个例子中



文章来源: Check PasswordBox if user type anything in WPF