我遇到了绑定到PasswordBox的问题.这似乎是一个安全风险,但我正在使用MVVM模式,所以我希望绕过这个.我在这里找到了一些有趣的代码(有没有人用过这个或类似的东西?)
http://www.wpftutorial.net/PasswordBox.html
它在技术上看起来很棒,但我不确定如何检索密码.
我基本上有我的LoginViewModelfor Username和属性Password.Username很好,正在工作,因为它是一个TextBox.
我按照说明使用了上面的代码并输入了这个
<PasswordBox ff:PasswordHelper.Attach="True"
ff:PasswordHelper.Password="{Binding Path=Password}" Width="130"/>
Run Code Online (Sandbox Code Playgroud)
当我有了PasswordBoxa TextBox,Binding Path=Password然后我的房产LoginViewModel被更新了.
我的代码很简单,基本上我有一个Commandfor my Button.当我按下它时会CanLogin被调用,如果它返回true,则调用它Login.
你可以看到我检查我的房产在Username这里工作得很好.
在Login我一起发送到我的服务Username和Password,Username包含数据从我View却Password是Null|Empty
private DelegateCommand loginCommand;
public string Username { get; set; }
public string Password { get; set; }
public ICommand LoginCommand
{
get
{ …Run Code Online (Sandbox Code Playgroud) 我已经读过,出于安全原因, WPF PasswordBox中的密码没有用于绑定密码的依赖项属性.尽管如此,无论如何都有办法绑定它.
MVVM模式的用户需要这种数据绑定; viewmodel无法在不破坏模式的情况下直接触摸PasswordBox.在MVVM设置中使用PasswordBoxes的一种方法是将整个PasswordBox控件传递给ViewModel,但这无论如何都会破坏模式.绑定密码可能是使用MVVM处理密码的最简洁方法.
有一个反对绑定密码的论据,因为这会将明文密码保存在未加密的内存中,直到它被垃圾收集.然而,我看到它的方式是,从您访问该Password属性的那一刻起,密码就会存储在未加密的内存中.这个观点(或类似的)似乎在这个问题中被借调.当然,它会在更短的时间内在没有绑定的情况下存在(不是登录形式有长期存在的倾向),但风险仍然存在.
鉴于这些论点,绑定密码真的是一个坏主意吗?为什么?
我刚开始使用MV-VM和WPF,并且遇到了解一些绑定问题的问题.
我有一个登录页面,其中包含a ComboBox和a PasswordBox.该ComboBox如下所示:
<ComboBox Name="comboBox1" SelectedItem="{Binding Path=Username}">
Run Code Online (Sandbox Code Playgroud)
这工作得很好 - 每次SelectedItem更改时我的值都会更新ComboBox!
在我的ViewModel中,我有一个ICommand使用此方法来确定Login按钮是否处于活动状态:
public bool CanLogin()
{
return !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password);
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我没有PasswordBox绑定ViewModel上的Password属性 - 所以我没有办法告诉它什么时候更新.
那么如何获取PasswordBoxViewModel 的值呢?我读过的所有内容都说不出PasswordBox于安全原因而绑定.我只是取消了CanLogin()的密码限制,但我需要将值传递给AccountService.
mvvm ×3
wpf ×3
c# ×2
binding ×1
data-binding ×1
passwordbox ×1
passwords ×1
security ×1
wpf-controls ×1