Search code examples
c#wpfmvvmpasswordspasswordbox

Check PasswordBox if user type anything in WPF


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>

Solution

  • You can use the PasswordChanged event via Interactions like this:

    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)

    How to bind to a PasswordBox in MVVM