Check PasswordBox if user type anything in WPF

Jean Tehhe picture Jean Tehhe · Mar 2, 2014 · Viewed 9.4k times · Source

I am using PasswordBox and I want to detect whenever the user typed there anything, if yes I need to change Button status to enabled. How can I check if user types anything in the PasswordBox?

It behaves differently from TextBox since you can't bind it to text and when user types anything raises some event. Any idea?

I have tried with the code below, but I get errors:

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

Answer

mcy picture mcy · Mar 2, 2014

You can use PasswordChanged event which fires when the string in the passwordbox changes:

XAML Part:

<PasswordBox Name="pwdBox" PasswordChanged="pwdBox_PasswordChanged" />
<Button Name="someButton" IsEnabled="False" Click="someClickEvent" />

C# Part:

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

Please note that MSDN says

When you get the Password property value, you expose the password as plain text in memory. To avoid this potential security risk, use the SecurePassword property to get the password as a SecureString.

Therefore the following code may be preferred:

    private void pwdBox_PasswordChanged(object sender, RoutedEventArgs e)
    {
        if (pwdBox.SecurePassword.Length == 0)
        {
            btn.IsEnabled = false;
        }
        else
        {
            btn.IsEnabled = true;
        }
    }

If you only have access to viewModel, then you may use attached properties such that you create a bindable password or securepassword, as in this example