Sto provando a fare una convalida per un PasswordBox
. Per fare convalide ho seguito questo link, che mostra come convalidare su TextBox
.Come convalidare PasswordBox WPF
Il problema si verifica con PasswordBoxes
. Siccome è Password
non è collegabile per motivi di sicurezza, ho provato a fare un binding seguendo this link (spiegato anche here, per gli utenti CodeProject).
Quindi, a quanto pare, fantastico! Posso bloccare il mio PasswordBox
con la sua proprietà Password
, quindi posso eseguire il binding con la mia convalida. Ma mi ignora ...
Si tratta di un normale TextBox
che io uso e funziona benissimo:
<local:ErrorProvider Grid.Column="1" Grid.Row="2" >
<TextBox Width="160"
HorizontalAlignment="Left"
Name="textBoxUserPass"
Text="{Binding Path=Password, UpdateSourceTrigger=Explicit}" />
</local:ErrorProvider>
E questo è il PasswordBox
ho cercato di simulare:
<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>
Questo è il modo in Ottengo il BindingExpression
per ogni TextBox
:
BindingExpression beUserName = textBoxUserName.GetBindingExpression(TextBox.TextProperty);
if (beUserName != null) beUserName.UpdateSource();
E questo è come ho capito per la PasswordBox
:
BindingExpression bePassword = textBoxUserPass.GetBindingExpression(PasswordBoxAssistant.BoundPassword);
if (bePassword != null) bePassword.UpdateSource();
Se abbiamo fatto alcun errore (definito sulla mia classe di convalida), quando faccio questo:
if (!beUserName.HasError && !bePassword.HasError)
ogni BindingExpression
dovrebbe dire true di false in base alla convalida dell'errore. Ma per il mio PasswordBox
non si ottiene mai il valore ... Qualche idea?
Hai provato impostazione ' ValidatesOnDataErrors = True' e 'ValidatesOnExceptions = True' sui tuoi binding? –
Non esiste per 'PasswordBox' ... – Sonhja
Lo fa per la proprietà associata' BoundPassword': 'local: PasswordBoxAssistant.BoundPassword =" {Percorso vincolante = Password, UpdateSourceTrigger = Esplicito, ValidatesOnDataErrors = True, ValidatesOnExceptions = True} "' –