J'essaie de modifier la propriété IsEnabled d'un bouton si la validation de certaines des zones de texte de mon formulaire est vraie. Donc, s'il y a des erreurs, la propriété IsEnabled doit être définie sur false.Implémentation de IDataErrorInfo & databinding
Pour une raison quelconque, je ne peux pas le faire fonctionner. L'implémentation IDataErrorInfo est appelée uniquement après l'appel de ma propriété IsEmailValid, donc Validation.GetHasError renvoie toujours false et mon bouton n'est jamais désactivé.
Quelqu'un peut-il aider?
code:
validé avec Textbox IDataErrorInfo
<TextBox Style="{StaticResource textBoxInError}" Name="txtEmail" Grid.Column="1" Grid.Row="2" Width="150" Height="23" HorizontalAlignment="Right" VerticalAlignment="Center">
<TextBox.Text>
<Binding Path="Email" Mode="TwoWay"
ValidatesOnDataErrors="True"
UpdateSourceTrigger="LostFocus"
></Binding>
</TextBox.Text>
</TextBox>
IDataErrorInfo Mise en œuvre:
public string Error
{
get
{
return null;
}
}
public string this[string name]
{
get
{
string result = null;
#region Email
if (name == "Email")
{
if (!presenter.LenientValidateEmail(Email))
{
result = "Your email address is not valid";
}
}
#endregion
#region Website
#endregion
return result;
}
}
Bouton lie IsEnabled
<Button Name="btnUpdate" IsEnabled="{Binding IsValid}" HorizontalAlignment="Left" Grid.Column="3" Grid.RowSpan="2" Grid.Row="6" Height="23" Width="75" Click="btnUpdate_Click">Update
</Button>
public bool IsValid
{
get
{
return IsEmailValid();
}
}
public string Email
{
get
{
return _email;
}
set
{
_email = value;
OnPropertyChanged("Email"); // executes before IDataErrorInfo Implementation
}
}
private bool IsEmailValid()
{
object el = FindName("txtEmail");
if (el != null)
{
_isEmailValid = Validation.GetHasError((DependencyObject)el); // always false??
if (_isEmailValid)
{
return false;
}
else
return true;
}
return true;
}
//PropertyChanged event handler:
void ProfileView_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
IsEmailValid();
}