IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

désactiver la validation quand une textbox est vide


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut désactiver la validation quand une textbox est vide
    Bonjour

    J'ai lié une textbox en mode "OneWayToSource" à une propriété de type "int". Le problème est que par défaut, cette textbox est entourée d'un cadre rouge car la valeur initiale étant une string vide, elle ne peut pas être convertie dans le type de la propriété à laquelle elle est lié.

    Voici le code très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <TextBox Text="{Binding Path=Age, Mode=OneWayToSource}" />
    Avec le framework 3.5, il n'y avait pas ce genre de validation automatique, mais depuis que je travaille avec le framework 4, j'ai cette validation qui m'ennuie..

    Cependant, j'aimerais par la suite afficher une alerte (de type cadre rouge), si l'utilisateur entre une valeur qui ne peut pas être convertie en Int (mais qui n'est pas une string vide), ou même créer ma propre ValidationRule.

    Même si je définie ma propre ValidationRule, et que je ne lève pas d'erreur quand Validate() reçoit une chaine vide, il reste toujours cette validation automatique. Est-il possible de la désactiver (au moins dans le cas d'une chaine vide)?

    Merci d'avance pour vos conseils.

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Oui, je pense qu'en faisant ça, ce sera bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Person
        {
            public string Name { get; set; }
            public int? Age { get; set; }
        }
    Bon dév.

  3. #3
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    bien sûr.. mais je ne veux pas modifier ma classe modèle.

    Je me demande simplement pourquoi cette validation auto est apparue avec le framework 4 et comment la désactiver (tout en conservant éventuellement d'autres validations personnalisées que j'aurais crées par ailleurs) ?

    J'aurais aussi la possibilité d'utiliser un converter, mais c'est quand même un peu lourd.. n'y a t-il pas simplement un moyen de désactiver cette validation (attribut?) ou de la surcharger?

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    La solution de sisqo60 est la seule façon de faire, tu peux mettre un nullable dans ton modèle et mettre une règle de validation pour tester que la propriété Age n'a pas la valeur nulle.

  5. #5
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Citation Envoyé par chamamo Voir le message
    La solution de sisqo60 est la seule façon de faire
    C'est un programmeur qui parle.. ?

    Je pense qu'il y a plusieurs façons de faire.. je pourrais par exemple introduire un converter pour transformer un champ vide en 0. Ou bien je pourrais simplement introduire un ViewModel qui lui contient des champs nullable et se charge de cette conversion. Je suis sûr qu'on peut encore imaginer d'autres solutions et si vous avez des idées, n'hésitez pas à m'en faire part.

    Mais je trouve que ces méthodes sont frustrantes... car tout ceci n'était pas nécessaire avec le framework 3.5 et je me demande bien pourquoi cette validation automatique a été introduite dans le framework 4. Je peux comprendre son utilité, mais il me parait anormal qu'on ne puisse pas facilement la désactiver, surtout si on ajoute par dessus une autre ValidationRule personnalisée qui sera éventuellement redondante avec les vérifications faites automatiquement.

    En mode OneWayToSource, cette validation particulièrement gênante car on attend de l'utilisateur qu'il renseigne des champs pour enrichir les entités du modèle, mais par défaut et avant même qu'il n'ai pu saisir quoique ce soit, il recevra un cadre rouge et ne comprendra pas ce qu'il puisse s'agir d'une erreur de saisie.

    J'ai enfin cherché du côté des attributs 'ValidatesOnDataErrors' et 'ValidatesOnExceptions' mais ils ne semblent n'avoir aucun effet sur cette validation automatique..

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 95
    Par défaut
    Les VM sont faites pour ça, conserver l'intégrité de ton model et l'adapter à la vue. Je pense pas qu'il faille chercher plus loin que ça et je connais pas d'alternative moins gourmande sans toucher à tes objets métiers.

  7. #7
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Citation Envoyé par maa Voir le message
    C'est un programmeur qui parle.. ?
    Je ne suis pas pas programmeur, plutôt developpeur.

    Citation Envoyé par maa Voir le message
    Je pense qu'il y a plusieurs façons de faire.. je pourrais par exemple introduire un converter pour transformer un champ vide en 0. Ou bien je pourrais simplement introduire un ViewModel qui lui contient des champs nullable et se charge de cette conversion. Je suis sûr qu'on peut encore imaginer d'autres solutions et si vous avez des idées, n'hésitez pas à m'en faire part.

    Mais je trouve que ces méthodes sont frustrantes... car tout ceci n'était pas nécessaire avec le framework 3.5 et je me demande bien pourquoi cette validation automatique a été introduite dans le framework 4. Je peux comprendre son utilité, mais il me parait anormal qu'on ne puisse pas facilement la désactiver, surtout si on ajoute par dessus une autre ValidationRule personnalisée qui sera éventuellement redondante avec les vérifications faites automatiquement.

    En mode OneWayToSource, cette validation particulièrement gênante car on attend de l'utilisateur qu'il renseigne des champs pour enrichir les entités du modèle, mais par défaut et avant même qu'il n'ai pu saisir quoique ce soit, il recevra un cadre rouge et ne comprendra pas ce qu'il puisse s'agir d'une erreur de saisie.

    J'ai enfin cherché du côté des attributs 'ValidatesOnDataErrors' et 'ValidatesOnExceptions' mais ils ne semblent n'avoir aucun effet sur cette validation automatique..
    Ce qui est frustrant c'est ton imagination débordante, faire un converter, validation ViewModel... pourquoi faire simple quand on peut faire compliqué hein?

    Peut importe l'outil de validation que tu utilises, tu peux spécifier si un champs doit être non nul, je ne vois pas en quoi ça te gène de mettre un int en nul et mettre une règle de validation, et un string ou la tu es obligé de le faire.

    J'avais déjà fait un framwork de validation sous CF avec mes propre attributs du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Required]
    public int? Entier{get;set}
    Moi personnellement ça ne me choque pas.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/04/2015, 15h06
  2. arreter une procédure quand une condition est validé
    Par levasseur62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/04/2011, 18h37
  3. tester si le résultat d'une requete est vide
    Par monstour dans le forum ASP
    Réponses: 13
    Dernier message: 04/10/2006, 14h14
  4. Tester si une table est vide
    Par rsc dans le forum SQL
    Réponses: 2
    Dernier message: 01/07/2004, 16h25
  5. [JDBC]tester si une table est vide
    Par zozolh2 dans le forum JDBC
    Réponses: 5
    Dernier message: 28/05/2004, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo