2011-05-03 80 views
5

我有一個MVVM運行樹視圖。頂層是一個包含憑證的賬戶對象。我有一個密碼框,可以用它來改變賬戶密碼,並在其後面有一個保存按鈕。代碼如下所示,是帳戶級模板的一部分:WPF CommandParameter綁定到PasswordBox.Password

PasswordBox Width="100" x:Name="pbPassword"/>

Button x:Name="btnSave" Command="{Binding ClickCommand}" CommandParameter="{Binding ElementName=pbPassword, Path=Password}" Height="20" Width="50">Save

我把東西進入PasswordBox,然後點擊保存。 ClickCommand觸發,但參數始終是string.Empty。我錯過了什麼?

+1

這個問題已經在這裏找到答案:http://stackoverflow.com/questions/1483892/wpf-binding-to-the-passwordbox-in-mvvm-working-解決方案 – light 2011-05-03 01:58:13

回答

9

出於安全原因,WPF不提供PasswordBox的密碼屬性的相關屬性(參考1,2),所以您的命令參數綁定不起作用。

你可以綁定的命令參數PasswordBox,然後從你的命令執行中訪問相應的屬性:

<Button Command="{Binding ClickCommand}" CommandParameter="{Binding ElementName=pbPassword}"> 

// command implementation 
public void Execute(object parameter) 
{ 
    var passwordBox = (PasswordBox)parameter; 
    var value = passwordBox.Password; 
} 

你可能要考慮不涉及在內存中保存的密碼以純文本的其他選項。

希望這有助於

+0

謝謝,這有助於我知道我可以直接綁定到密碼框本身。這使我可以直接從數據庫中加密的命令中保存這些數據,然後立即處理密碼,而不必將其分配給變量。 – light 2011-05-03 02:37:48

-1

- 請中斷標誌我推倒在此,請參見下面的評論,這是不行的,但這樣沒有其他人做同樣的mistake--

離開

對不起老Q,卻發現對

<Button Content="Log On" 
    Command="{Binding LogOnCommand}" 
    CommandParameter="{Binding ElementName=PasswordControl, Path=SecurePassword}" /> 

這樣的改善您的命令只需要知道一個SecureString的對象

public override void Execute(object parameter) 
{ 
    _viewModel.LogOnAsync((SecureString)parameter); 
} 

保持UI的知識,從命令

+5

不好意思不行,你只是得到一個零長度的SecurePassword - 該死 - 很興奮 – 2012-05-03 22:50:25

相關問題