2009-07-13 57 views
31

我怎麼能做到這一點在XAML:如何使TextBox成爲「密碼框」並在使用MVVM時顯示星號?

僞代碼:

<TextBox Text="{Binding Password}" Type="Password"/> 

,使用戶可以看到星星或點時,他在密碼是打字。

我已經試過various examples這表明PasswordCharPasswordBox,但不能讓這些工作。

例如我能做到這一點,如圖here

<PasswordBox Grid.Column="1" Grid.Row="1" 
    PasswordChar="*"/> 

,但我當然希望Text屬性到我的視圖模型綁定所以單擊按鈕時(不使用代碼後面),我可以發送值綁定文本框,我想這樣做:

<TextBox Grid.Column="1" Grid.Row="0" 
    Text="{Binding Login}" 
    Style="{StaticResource FormTextBox}"/> 
<PasswordBox Grid.Column="1" Grid.Row="1" 
    Text="{Binding Password}" 
    PasswordChar="*" 
    Style="{StaticResource FormTextBox}"/> 

但PasswordBox沒有Text屬性。

+1

你能詳細說明爲什麼PasswordChar和PasswordBox不起作用嗎? – 2009-07-13 13:59:20

+0

似乎這不是用MVVM那麼簡單,我在這裏發現了一個類似的問題:http:// stackoverflow。com/questions/1097235/passwordbox-with-mvvm – 2009-07-13 14:08:57

回答

26

要在PasswordBox中獲取或設置密碼,請使用Password屬性。如

string password = PasswordBox.Password; 

這不支持數據綁定,據我知道,所以你必須設置在代碼隱藏的價值,並相應地更新它。

+0

可能會提及: user7116 2009-07-13 14:10:19

8

發送passwordbox控制作爲參數傳遞給您的登錄命令。

<Button Command="{Binding LoginCommand}" CommandParameter="{Binding ElementName=PasswordBox}"...> 

然後你可以在你的viewmodel中調用CType(parameter, PasswordBox).Password

3

謝謝科迪,這非常有幫助。我剛剛加入一個例子使用委派命令球員在C#

<PasswordBox x:Name="PasswordBox" 
      Grid.Row="1" Grid.Column="1" 
      HorizontalAlignment="Left" 
      Width="300" Height="25" 
      Margin="6,7,0,7" /> 
<Button Content="Login" 
     Grid.Row="4" Grid.Column="1" 
     Style="{StaticResource StandardButton}" 
     Command="{Binding LoginCommand}" 
     CommandParameter="{Binding ElementName=PasswordBox}" 
     Height="31" Width="92" 
     Margin="5,9,0,0" /> 

 

public ICommand LoginCommand 
{ 
    get 
    { 
     return new DelegateCommand<object>((args) => 
     { 
      // Get Password as Binding not supported for control-type PasswordBox 
      LoginPassword = ((PasswordBox) args).Password; 

      // Rest of code here 
     }); 
    } 
} 
1

我沒了下文從視圖代碼隱藏在視圖模型中設置我的財產。不知道它是否真的「打破」了MVVM模式,但它發現了最好且最複雜的解決方案。

var data = this.DataContext as DBSelectionViewModel; 

     data.PassKey = txtPassKey.Password; 
2

你可以讓你TextBox如通過簡單地添加以下價值,你TextBox控制的FontFamily財產customed PasswordBox

<TextBox 
    Text="{Binding Password}" 
    FontFamily="ms-appx:///Assets/PassDot.ttf#PassDot" 
    FontSize="35"/> 

在我的情況下,這是完美的。這將顯示點代替實際文本(不是星號(*))。

相關問題