2012-05-28 117 views
1

我在Page上使用了PasswordBox。由於實施的工作流程,用戶可以導航到子頁面(NavigationWindow),並返回GoBack()到主頁面。PasswordBox在導航上丟失內容

但是,當這樣做時,密碼框始終爲空!我的工作是防止這種行爲,但目前我不知道如何做到這一點。

如果你能幫助我,這將是一件好事。 謝謝

+0

我只是想知道,爲什麼你要打開的是關閉?在沒有登錄的情況下從登錄頁面導航取消該流程,重新開始很好。在這種情況下(IMHO),安全性應該高於可用性。如果由於某種原因,您需要永遠在代碼隱藏中引用密碼,則應考慮重新考慮您的架構。通過在登錄後將密碼保存在視圖模型中或完全重新考慮登錄註銷模型。 – Sascha

+0

嗨Sascha。這不是登錄頁面,而是可以在其中設置密碼的配置頁面。導航到子頁面用於設置選項。我不想一頁接一頁地存儲到數據庫中。我想一次存儲所有選項,當用戶保存它們時。所以我必須將它們保存在內存中,直到用戶按下「保存」。 – BitKFu

回答

2

這是一個功能。

請參見:How to bind to a PasswordBox in MVVM

爲了使落後的導航需要存儲頁面的狀態。這並不安全。

+0

,但即使使用此解決方案,密碼也只存儲在ViewModel中,但不存儲在View中。當用戶從子頁面返回時,我希望PasswordBox保留密碼。正如我上面所說的,這不是登錄頁面,而是用戶可以在其中設置密碼的配置頁面。 – BitKFu

+0

即使(當然)/(他們認爲)潛在的安全威脅 –

+0

謝謝。找到了解決我的問題的解決方法。 – BitKFu

0

我不認爲他的確切問題是一個功能,但導航服務的錯誤。

在您的代碼背後,您沒有簡單的方法來區分導航控件在導航上消隱密碼或用戶通過從框中刪除消隱它。 因此,如果您不考慮這一點,那麼如果您導航到另一個頁面,您的viewmodel中的密碼將始終爲空。

我用這個技巧來確定誰打電話給我的密碼更改處理程序來更新視圖模型:

private void PasswordBox_OnPasswordChanged(object sender, RoutedEventArgs e) 
{ 
    StackTrace stack = new StackTrace(); 
    StackFrame[] stackframes = stack.GetFrames(); 
    foreach (StackFrame stackFrame in stackframes) 
     if(stackFrame.GetMethod().Name == "Navigate") 
      return; 
    ViewModelPassword = PasswordBox.SecurePassword; 
.... 

看看這裏太:http://www.wpfsharp.com/2011/04/08/wpf-navigationservice-blanks-passwordbox-password-which-breaks-the-mvvm-passwordhelper/