C# 密码箱验证

C# 密码箱验证,c#,wpf,validation,C#,Wpf,Validation,PasswordBox元素的密码属性不是DependencyObject,因此无法绑定(没有文本属性)。通过将消息附加到PasswordChanged事件,传递源代码并在视图模型中获取,可以在用户键入时捕获密码。但是,缺少绑定意味着没有机会设置validateSondaErrors=True,因此不会调用IDataErrorInfo方法,这意味着不会激活任何错误模板。有人知道如何解决这个问题吗?也就是说,是否有其他方法让元素调用IDataErrorInfo索引器的视图模型 一个合理的问题可能是为

PasswordBox
元素的密码属性不是
DependencyObject
,因此无法绑定(没有文本属性)。通过将消息附加到
PasswordChanged
事件,传递源代码并在视图模型中获取,可以在用户键入时捕获密码。但是,缺少绑定意味着没有机会设置
validateSondaErrors=True
,因此不会调用
IDataErrorInfo
方法,这意味着不会激活任何错误模板。有人知道如何解决这个问题吗?也就是说,是否有其他方法让元素调用
IDataErrorInfo
索引器的视图模型

一个合理的问题可能是为什么要验证密码

原因有二:

1) 要让用户知道密码是必需的


2) 让用户知道密码和密码确认是否相同。

这里还有一个很好的答案: 但是,如果这样做,密码将以纯文本形式存储在内存中


也许最好将示例中附带的属性“Password”更改为类似“IsEmpty”和“PasswordHash”的内容。

下面是Alex的回答,我也使用了本文中的信息

我做了以下允许验证的工作:

XAML:

<Grid Grid.Row="2" Grid.Column="1">
    <TextBox x:Name="plain1" Text="{Binding Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True,NotifyOnValidationError=True}" Visibility="Hidden" />
    <PasswordBox x:Name="PasswordHelperBox" w:PasswordHelper.Attach="True" w:PasswordHelper.Password="{Binding Text, ElementName=plain1, Mode=TwoWay}" TabIndex="2" Margin="0,2,30,2"/>
</Grid>

那么,你是说根本没有验证密码框并在验证后在密码框周围加上红色边框的解决方案?我不知道为什么人们会接受密码箱破解。我的商店当然不允许使用这种解决方案。要了解这是一个坏主意的原因,请阅读以下文章:PGallagher提供的教程间接引用了这种解决方案,但强调不够。