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 :

[MVVM] Validation sans code behind


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [MVVM] Validation sans code behind
    Bonjour,

    Je met de la validation coté UI dans mon application WPF utilisant le patern MVVM.

    J'ai une série de contrôles qui dispose de ValidationRule et qui sont associé a un ValidationGroup.

    Pour l'instant je n'ai pas trouver de meilleur moyen que de lancer la validation de mes contrôles avec du code C# de l'évènement click de mon bouton de submit et remplir une propriété dans mon VM.

    Je procède de cette façon :

    VM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public bool HasError { get; set; }
     
    public GraphMarkViewModel()
    {
        SaveCommand = new RelayCommand(o => Save(), o => !HasError);
    }
    View :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var expressions = BindingGroup.BindingExpressions;
        expressions.ForEach(ex => ex.UpdateSource());
        (DataContext as GraphMarkViewModel).HasError = expressions.Any(ex => ex.HasError);
    }
    Quelqu'un a des idées pour améliorer cette architecture ? voir tout faire en XAML ? Je rêve peut être ?

    merci d'avance

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tout faire en XAML, tu pourras pas (à moins de créer ta propre MarkupExtension, etc... donc au final, tu écriras quand même du code )

    Sinon, là comme ca, je vois pas d'autres moyens...

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Ok merci !

    humm je crois que j'ai une idée ...

    Je fais un retour si ça vaut le coup

  4. #4
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Et pourquoi pas tout faire dans le VM ?...
    Avec une DP sur tonVM.HasError ?

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Mais tu la remplis comment cette DP ?

  6. #6
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    T'as pas moyen de faire de la notification sur les propriétés de ton VM qui sont sujettes à validation ?

    Je veux dire, dans l'idéal, ton VM ne devrait pas avoir besoin de ta vue xaml pour fonctionner.

    Donc quelque chose de ce style :
    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
    17
    18
    19
    20
    21
    22
    class ViewModel : DependencyObject, Iblablabla
    {
      propdp bool HasError
     
      public string BoundPropertyA{
        get{...}
        set{... Validate();}
      }
     
      void Validate(){
        ....
      }
     
      public ICommand SaveCommand{...}
     
      public ViewModel(){
        this.SaveCommand = new RelayCommand{
          CanExecuteDelegate = x=>this.HasError == false,
          ExecuteDelegate = x=> ...
        };
      }
    }

Discussions similaires

  1. MVVM View et code Behind
    Par Lionhart dans le forum C#
    Réponses: 2
    Dernier message: 29/06/2014, 23h13
  2. [MVVM] Fermer une fenêtre (sans code behind)
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 22/06/2011, 19h57
  3. Réponses: 1
    Dernier message: 21/01/2011, 10h17
  4. MVVM : Fermer une fenêtre enfant sans code-behind !
    Par GregLeOuf dans le forum Windows Presentation Foundation
    Réponses: 13
    Dernier message: 11/12/2010, 13h16
  5. [MVVM] Abstrait sans code
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 05/10/2010, 09h20

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