Bonjour,
Je suis actuellement en cours de réalisation d'un formulaire mais je ne sais pas comment faire la validation des données entrées par l'utilisateur;
Lorsque je bind ma view sur une donnée de mon ViewModel ma view est capable de détecter les erreurs de types; c'est-à-dire que si je mets une String dans une variable bindé de type Int j'ai un cadre rouge qui s'affiche, de cette façon :
J'ai aussi cette exception qui vient avec dans mon affichage console ( sa me parait normal et pas dangereux car, oui la valeur n'a pas le bon type) :
System.Windows.Data Error: 7 : ConvertBack cannot convert value 'jh' (type 'String'). BindingExpressionath=CommandeFournisseur.Delai; DataItem='CommandeFournisseurViewModel' (HashCode=15323058); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: Le format de la chaîne d'entrée est incorrect.
à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
à System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
à System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
Ma view est binder de cette façon :
et mon model est celui-ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <Label Grid.Column="0" Grid.Row="4">Délai :</Label> <!--<TextBlock Grid.Column="0" Grid.Row="4" Text="Délai" />--> <TextBox Grid.Column="1" Grid.Row="4" Text="{Binding CommandeFournisseur.Delai, ValidatesOnDataErrors=True}" />
Code : 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 [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)] [DataMemberAttribute()] public Nullable<global::System.Int32> Delai { get { return _Delai; } set { OnDelaiChanging(value); ReportPropertyChanging("Delai"); _Delai = StructuralObject.SetValidValue(value); ReportPropertyChanged("Delai"); OnDelaiChanged(); } } private Nullable<global::System.Int32> _Delai; partial void OnDelaiChanging(Nullable<global::System.Int32> value); partial void OnDelaiChanged();
Mon problème intervient lorsque je définis une taille max à un type String. Admettons une variable Tel qui est un NVarchar(10) en BDD et donc String dans mon appli.
De cette façon :
Lorsque je tape une chaine de plus de 10 caractères dans la TextBox , celle-ci ne se colore pas en rouge. Comment puis-je faire pour imiter le comportement sur la vérification de type ? Et l'encadrer de rouge si la valeur et plus grande que ce que peut stocker la base de données.
Code : 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 [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)] [DataMemberAttribute()] public global::System.String Telephone { get { return _Telephone; } set { OnTelephoneChanging(value); ReportPropertyChanging("Telephone"); _Telephone = StructuralObject.SetValidValue(value, true); ReportPropertyChanged("Telephone"); OnTelephoneChanged(); } } private global::System.String _Telephone; partial void OnTelephoneChanging(global::System.String value); partial void OnTelephoneChanged();
Partager