2012-11-22 74 views
1

我在這裏發現了關於這個問題的幾個信息,但在某種程度上,我並沒有真正明白它;-)從我讀過的密碼箱的密碼不能綁定到屬性由於安全原因,即保持密碼在內存中。從密碼箱獲取密碼

我的模型包含此:

private SecureString password; 
public SecureString Password { 
    get { return password; } 
    set { password = value; } 
} 

雖然不支持數據綁定到一個PasswordBox,微軟必須一些知道如何從PasswordBox得到密碼,並以安全的方式使用它,誒?

什麼可能是一個適當和相對簡單的方法來做到這一點?

+2

去這個線程http://stackoverflow.com/questions/1483892 /如何對結合到一個-passwordbox合MVVM。它會對你有所幫助:) – CodeNotFound

+2

你可以使用http://stackoverflow.com/questions/888466/passwordbox-binding – Niki

+0

中描述的附加屬性進行綁定。你可以參考http://stackoverflow.com/問題/ 20322694/get-password-from-passwordbox-in-listbox-of-listboxitems-defined-in-xaml/20323500#20323500>。這可能對你有所幫助:) – Ramashankar

回答

-1
<PasswordBox Height="29" HorizontalAlignment="Left" Margin="191,136,0,0" Name="textPassword" VerticalAlignment="Top" PasswordChar="*" Width="167" /> 

passwordbox的名稱是textPassword

String pass = textPassword.Password; 
1

爲此我寫了一個UserControl具有可綁定密碼 - SecureString。這UserControl的代碼如下所示:

代碼隱藏:

public partial class BindablePasswordBox : UserControl 
    { 
     public static readonly DependencyProperty SecurePasswordProperty = DependencyProperty.Register(
      "SecurePassword", typeof(SecureString), typeof(BindablePasswordBox), new PropertyMetadata(default(SecureString))); 

     public SecureString SecurePassword 
     { 
      get { return (SecureString)GetValue(SecurePasswordProperty); } 
      set { SetValue(SecurePasswordProperty, value); } 
     } 

     public BindablePasswordBox() 
     { 
      InitializeComponent(); 
     } 

     private void PasswordBox_OnPasswordChanged(object sender, RoutedEventArgs e) 
     { 
      SecurePassword = ((PasswordBox)sender).SecurePassword; 
     } 

     private void BindablePasswordBox_OnGotFocus(object sender, RoutedEventArgs e) 
     { 
      passwordBox.Focus(); 
     } 
    } 

XAML:

<UserControl x:Class="Sol.Controls.BindablePasswordBox" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" 
      GotFocus="BindablePasswordBox_OnGotFocus"> 
    <PasswordBox x:Name="passwordBox" PasswordChanged="PasswordBox_OnPasswordChanged"/> 
</UserControl>