Comment valider PasswordBox WPF
Je suis en train de faire une validation pour un PasswordBox
. Pour faire des validations j'ai suivi ce lienqui montre comment valider sur TextBox
.
Le problème vient PasswordBoxes
. Comme c'est Password
n'est pas bindable pour des raisons de sécurité, j'ai essayé de faire une liaison suivant ce lien (également expliqué icipour CodeProject utilisateurs).
Donc, apparemment, fantastique!!!! Je peux lier mon PasswordBox
avec ses Password
bien, alors je peux lier avec ma validation. Mais il m'ignore...
C'est un régulier TextBox
que j'utilise et qui fonctionne bien:
<local:ErrorProvider Grid.Column="1" Grid.Row="2" >
<TextBox Width="160"
HorizontalAlignment="Left"
Name="textBoxUserPass"
Text="{Binding Path=Password, UpdateSourceTrigger=Explicit}" />
</local:ErrorProvider>
Et c'est le PasswordBox
j'ai essayé de simuler:
<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>
C'est la façon dont je reçois la BindingExpression
pour chaque TextBox
:
BindingExpression beUserName = textBoxUserName.GetBindingExpression(TextBox.TextProperty);
if (beUserName != null) beUserName.UpdateSource();
Et c'est de cette façon que je l'obtenir pour la PasswordBox
:
BindingExpression bePassword = textBoxUserPass.GetBindingExpression(PasswordBoxAssistant.BoundPassword);
if (bePassword != null) bePassword.UpdateSource();
Si nous avons fait une erreur (défini sur ma Validation de classe), quand je fais ceci:
if (!beUserName.HasError && !bePassword.HasError)
chaque BindingExpression
faut dire vrai de faux en fonction de l'erreur de validation. Mais pour ma PasswordBox
n'est jamais la valeur... une idée?
source d'informationauteur Sonhja | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Essayez de définir
ValidatesOnDataErrors=True
etValidatesOnExceptions=True
sur votre liaison:Une autre solution, sans utiliser de "non sécurisé" chaîne dans le milieu, est d'adapter le code de la Fenêtre, quelque chose comme ceci:
Supposons que j'ai un MVVM un objet comme ça, avec WPF validation à l'aide de IDataErrorInfo:
Et une Fenêtre Xaml avec PasswordBox comme ceci:
Ensuite, la Fenêtre correspondante code comme ceci va déclencher PasswordBox de liaison:
Aussi loin que je me souvienne, la seule façon d'ajouter de validation sur un PasswordBox est à jeter un nouveau ValidationException dans le setter de la propriété de liaison pour SecurePassword. Le PasswordBoxAssistant ne sera pas vous aider avec ceci.
Set Mode=TwoWay sur votre liaison