2014-03-02 19 views
0

我正在使用PasswordBox,并且我想要在用户键入任何内容时检测到任何内容,如果是,则需要将按钮状态更改为启用。我如何检查用户是否在PasswordBox中键入任何东西 ?如果用户在WPF中输入任何内容,请检查PasswordBox

它的行为与TextBox的行为不同,因为您无法将其绑定到文本 ,并且用户输入任何内容时都会引发某些事件。任何想法?

我试图与下面的代码,但我得到的错误:

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

回答

2

您可以通过Interactions使用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 
} 

Some useful links

PasswordBox in WPF Tutorial

Binding to PasswordBox in WPF (using MVVM)

How to bind to a PasswordBox in MVVM

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,如in this example

+0

感谢MCY +1,问题是,我没有针对CS模型视图的情况下,有一个方法来调用这个事件在模型视图本身?你可以看到,我试图用更新的问题 –

相关问题