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 Problème de binding avec une class Business


Sujet :

Windows Presentation Foundation

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut MVVM Problème de binding avec une class Business
    Bonjour,

    J'ai une application WPF avec une architecture MVVM.
    Cette application fait référence à un projet business(une bibliothèque de classes C#, que je peux modifier)

    Lors d'appel à des méthodes du business, certaines propriétés de ma class business changent d'état.

    Comment faire pour signaler à ma ViewModel que des propriétés de ma class business ont changés ?

    Dois-je crée des évènements dans ma class business pour chaque propriété, et que ma viewmodel s'y abonnent ?

    Dois-je faire une méthode RefreshProperties dans ma ViewModel qui récupère toute les propriétés ?

    D'autres idées ? Quel design pattern faire ?

    Merci pour votre aide

  2. #2
    Membre confirmé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Points : 610
    Points
    610
    Par défaut
    Bonjour Oberown,

    Si ton objectif est simplement de notifier la viewmodel que le model est modifié, tu peux t'abonner à l'event OnPropertyChanged de ton model que tu auras pris soin d'implémenter via INotifyPropertyChanged (et par la même occasion ça te servira pour mettre à jour ton IHM).

    En gros tu implémentes l'event

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propname)
    {
    	if (PropertyChanged != null)
    		PropertyChanged(this, new PropertyChangedEventArgs(propname));
    }

    tu l'utilises dans tes propriétés

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private string _prop;
    public string prop
    {
    get { return _prop; }
    set
    {	
    	_prop = value;
    	OnPropertyChanged("prop");
    }
    }

    et pis si tu veux écouter chaque changement de valeur dessus depuis ta viewmodel par exemple

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    monmodel.PropertyChanged += (s, e) =>
                    {
                        Console.WriteLine(e.PropertyName.ToString());
                    };

    Voilà, en espérant que ça t'aide ...

    @+

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    C'est ce que j'utilise dans ma ViewModel.
    Mais est-ce que j'ai le droit de le faire dans ma class buisness (qui n'est qu'une librairie C#) ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Oberown Voir le message
    Dois-je crée des évènements dans ma class business pour chaque propriété, et que ma viewmodel s'y abonnent ?

    Dois-je faire une méthode RefreshProperties dans ma ViewModel qui récupère toute les propriétés ?
    Il faut voir ce qui est le plus pratique selon les cas... Personnellement je n'aime pas trop mettre des notifications PropertyChanged dans le modèle (quoique ça peut sans doute se justifier dans certains cas), car ce n'est pas très pratique de gérer la propagation des évènements du modèle au ViewModel.

    En fait, la principale question qui se pose est la suivante : est-ce que ton modèle peut changé sans que ce soit une action initiée par le ViewModel. Si oui, tu n'as pas vraiment le choix, il faudra des évènements dans le modèle pour que le VM puisse être notifié. Par contre, si c'est toujours le ViewModel qui déclenche le changement (même indirectement), tu peux simplement appeler une méthode Refresh après avoir exécuté cette action...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Points : 295
    Points
    295
    Par défaut
    Merci en effet c'est toujours le ViewModel qui déclenche le changement.
    Donc mon idée de base de faire un refresh est juste.

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il faut voir ce qui est le plus pratique selon les cas... Personnellement je n'aime pas trop mettre des notifications PropertyChanged dans le modèle (quoique ça peut sans doute se justifier dans certains cas), car ce n'est pas très pratique de gérer la propagation des évènements du modèle au ViewModel
    Tiens pourtant c'est pas la technique la plus souvent utilisé?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Tiens pourtant c'est pas la technique la plus souvent utilisé?
    Bah pas par moi en tous cas, sauf si je peux pas l'éviter...

    Mon raisonnement est que le modèle ne devrait pas avoir besoin d'être modifié pour être utilisé dans une application MVVM. Ça peut très bien, par exemple, être un modèle déjà existant, que tu ne peux pas modifier. Et il pourrait aussi être utilisé dans d'autres contextes sans rapport avec WPF (appli web, web service...), il ne devrait donc pas avoir à gérer des problématiques spécifiques à une UI particulière.

    Après, si le modèle implémente déjà INotifyPropertyChanged, rien n'empêche d'en profiter, mais perso je ne trouve pas ça super pratique.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Perso j'ai trouvé ca aussi assez particulier puisque que ton modele est couplé à IU mais dans les exemples que j'ai vu ils procédaient de cette manière. Maintenant je ne sais pas si c'était pour montrer la technique ou si c'était dans la "norme" de développement d'application WPF.


    Dans notre architecture on a une copie de la définition des objets une version dto pour le coté serveur et une version pour le coté client qui elle implémente le INotifyPropertyChanged mais bon je trouve pas ca très pratique.
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C#/Xaml Binding avec une classe hérité de UserControl
    Par yupa dans le forum Développement Windows
    Réponses: 1
    Dernier message: 26/06/2012, 14h46
  2. [WPF] Problème de binding avec une classe perso
    Par JuTs dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 12/04/2010, 18h45
  3. Réponses: 3
    Dernier message: 07/07/2008, 23h03
  4. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37
  5. Réponses: 8
    Dernier message: 16/10/2006, 12h28

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