我正在尝试对一个PasswordBox进行验证。为了进行验证,我遵循了这个链接,这说明了如何在TextBox上进行验证。
PasswordBoxes带来了问题。因为由于安全原因,它的Password不可绑定,所以我尝试在此链接之后进行绑定(对于CodeProject用户也解释了这里 )。
所以,很显然,太棒了!我可以用它的PasswordBox属性绑定我的Password,这样我就可以绑定我的验证了。但它忽略了我..。
这是一个普通的TextBox,我使用它并运行得很好:
<local:ErrorProvider Grid.Column="1" Grid.Row="2" >
<TextBox Width="160"
HorizontalAlignment="Left"
Name="textBoxUserPass"
Text="{Binding Path=Password, UpdateSourceTrigger=Explicit}" />
</local:ErrorProvider>这就是我试图模拟的PasswordBox:
<local:ErrorProvider Grid.Column="1" Grid.Row="2" >
<PasswordBox Width="160"
HorizontalAlignment="Left"
Name="textBoxUserPass"
local:PasswordBoxAssistant.BindPassword="True"
local:PasswordBoxAssistant.BoundPassword="{Binding Path=Password, UpdateSourceTrigger=Explicit}" />
</local:ErrorProvider>这就是我如何为每个BindingExpression获得TextBox
BindingExpression beUserName = textBoxUserName.GetBindingExpression(TextBox.TextProperty);
if (beUserName != null) beUserName.UpdateSource();这就是我如何为PasswordBox得到的
BindingExpression bePassword = textBoxUserPass.GetBindingExpression(PasswordBoxAssistant.BoundPassword);
if (bePassword != null) bePassword.UpdateSource();如果我们犯了任何错误(在我的验证类上定义),当我这样做时:
if (!beUserName.HasError && !bePassword.HasError)根据错误验证,每个BindingExpression都应该说true of false。但我的PasswordBox永远得不到价值..。有什么想法吗?
发布于 2013-02-27 14:50:17
尝试在绑定上设置ValidatesOnDataErrors=True和ValidatesOnExceptions=True:
<PasswordBox ...
local:PasswordBoxAssistant.BoundPassword="{Binding Path=Password,
UpdateSourceTrigger=Explicit,
ValidatesOnDataErrors=True,
ValidatesOnExceptions=True}"
/>发布于 2013-07-03 19:36:26
在绑定上设置Mode=TwoWay
local:PasswordBoxAssistant.BoundPassword="{Binding Path=Password,Mode=TwoWay,
UpdateSourceTrigger=Explicit}"发布于 2013-02-27 13:49:10
据我所知,在PasswordBox上添加验证的唯一方法是在SecurePassword绑定属性的setter中抛出一个新的ValidationException。PasswordBoxAssistant不会帮你这个忙。
https://stackoverflow.com/questions/15112292
复制相似问题