Bonjour,
J'ai une textbox bindée sur un champ TimeSpan. J'utilise un converter pour passer du TimeSpan à un string (hh:mm) et vis versa pour afficher/récupérer la bonne valeur.
J'aimerais pouvoir limiter au maximum le risque d'entrer des valeurs fausses (du genre 12,4, ab:00, etc ...) mais seulement des temps au format hh:mm.
Je voulais utiliser une validation rule avec un regex à l'intérieur, mais je n'arrive pas à corriger efficacement le problème (je peux quand même entrer n'importe quoi)
Est-ce que quelqu'un pourrait m'aider à résoudre ce problème ?
Dans mon xaml, j'appelle ma validation rule comme ceci :
Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <TextBox Name="tbxEstimatedTaskTimespan" > <TextBox.Text> <Binding Path="EstimatedOPTimespan" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" > <Binding.ValidationRules> <local:HoursValidationRule ValidatesOnTargetUpdated="True" /> </Binding.ValidationRules> </Binding> </TextBox.Text> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> <Setter Property="Background" Value="Red"/> <Setter Property="Text" Value=""/> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>
Ma validation rule ressemble à quelquechose comme ça :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { var s = value as string; if (string.IsNullOrEmpty(s)) { return new ValidationResult(false, "Field cannot be blank"); } //var match = Regex.Match(s, @"^\d{4}:d{2}$"); var match = Regex.Match(s, @"/^([1-9]|1[0-2]):[0-5]"); if (!match.Success) { return new ValidationResult(false, "Field must be in hh:mm format"); } return new ValidationResult(true, null); }
Merci d'avance.
Partager