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 :

Nom : Capture.PNG
Affichages : 140
Taille : 741 octets


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 :
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}" />
et mon model est celui-ci
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 :
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();
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.