2014-03-02 82 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模型視圖的情況下,有一個方法來調用這個事件在模型視圖本身?你可以看到,我試圖用更新的問題 –

相關問題