Nous savons tous à quel point la validation de WPF est prête à l'emploi. J'essaie une chose très simple et pour une raison quelconque, il échoue toujours. J'ai un TextBox et ma seule exigence est de valider que l'utilisateur entre quelque chose dans le TextBox. Le TextBox est lié à un objet Client avec les propriétés Prénom et Nom.Les règles de validation de liaison TextBox de WPF ne se déclenchent pas sur LostFocus lorsque TextBox est vide
Voici le code XAML:
<TextBox Style="{StaticResource TextBoxStyle}" Grid.Column="1" Grid.Row="0" Height="20" Width="100" Margin="10">
<TextBox.Text>
<Binding Path="FirstName" >
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Voici la propriété classe Client Prénom:
public string FirstName
{
get { return _firstName;}
set
{
if(String.IsNullOrEmpty(value))
throw new ApplicationException("FirstName cannot be null or empty!");
_firstName = value;
OnPropertyChanged("FirstName");
}
}
Même si je lance une exception si la FirstName (valeur) est nulle ou videz est seulement manipulé si je tape quelque chose dans le TextBox et puis le supprime et tabule ensuite. La raison en est que cela dépend de l'événement changé de propriété. Mais même si je mets cette liaison TextBox sur Focus, elle ne déclenche pas la validation.
MISE À JOUR:
Une des façons les plus laides de traiter cette question est d'attribuer le String.Empty aux champs de saisie sur l'événement Window.Loaded:
void AddCustomerWindow_Loaded(object sender, RoutedEventArgs e)
{
// get all the textboxes and set the property to empty strings!
txtFirstName.Text = String.Empty;
txtLastName.Text = String.Empty;
}
Voici le code pour la liaison:
public AddCustomerWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(AddCustomerWindow_Loaded);
gvAddCustomer.DataContext = new Customer();
}
Comme, vous pouvez voir le code mis à jour la zone de texte est lié à un nouvel objet client. Lorsque je ne tape rien dans le TextBox et l'onglet à un contrôle différent rien ne se passe. Il devrait déclencher la validation mais ce n'est pas le cas! La seule façon de déclencher la validation est d'affecter manuellement la propriété .Text de TextBox dans l'événement Window.Loaded. – azamsharp
Oui, je vois. Et quand le Prénom est appelé, renvoie-t-il une chaîne ou une valeur nulle? – user112889
Il retourne null! – azamsharp