在WPF MVVM模式下安全绑定PasswordBox:详细步骤
在MVVM架构中绑定PasswordBox会引发安全问题,但可以实现安全可靠的绑定方法。一种常用的技术在http://www.wpftutorial.net/PasswordBox.html 提供的代码示例中有所体现。
PasswordBox绑定实践
让我们深入探讨这种技术的实现。假设ViewModel中包含用户名和密码属性。将用户名绑定到TextBox非常简单,但将密码绑定到PasswordBox则需要一些修改。
使用提供的代码,您可以在XAML中包含PasswordBox:
<code class="language-xml"><passwordbox ff:passwordhelper.attach="True" ff:passwordhelper.password="{Binding Path=Password}" width="130"></passwordbox></code>
有了这个设置,以下代码演示了在ViewModel中使用Command属性:
<code class="language-csharp">private DelegateCommand loginCommand; public string Username { get; set; } public string Password { get; set; } public ICommand LoginCommand { get { if (loginCommand == null) { loginCommand = new DelegateCommand(Login, CanLogin); } return loginCommand; } } private bool CanLogin() { return !string.IsNullOrEmpty(Username); } private void Login() { bool result = securityService.IsValidLogin(Username, Password); }</code>
隐藏的步骤?
虽然上述代码确保了绑定,但PasswordBox绑定中一个关键步骤经常被忽视。检查XAML时,您会发现TextBox的用户名绑定按预期工作,但PasswordBox的密码绑定不会更新ViewModel属性。
秘密助手
事实上,您在助手类中设置断点,确认代码执行但未能更新ViewModel的Password属性。这就是缺少关键步骤的地方。
手动绑定
要完成实现,需要在PasswordBox和ViewModel之间建立连接。在代码隐藏文件中,为PasswordBox的PasswordChanged事件定义一个处理程序:
<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (this.DataContext != null) { ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword; } }</code>
安全方法
通过在ViewModel中定义一个SecureString属性并处理PasswordChanged事件,您可以安全地检索密码值,同时保持MVVM原则。此方法避免违反安全准则,并保持视图和ViewModel之间的清晰划分。
以上是如何在 WPF 中将 PasswordBox 安全地绑定到 ViewModel?的详细内容。更多信息请关注PHP中文网其他相关文章!