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 :

Binding / MVVM : mise à jour


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut Binding / MVVM : mise à jour
    Bonjour,

    J'ai un usercontrol avec des texts box, listbo,x combobox, ...

    Par exemple, une fiche client : Nom, Prénom, Adresse, ...

    Tout est bien "Binder". En fait je sélectionne un client dans une listebox et la fiche se met à jour.

    Comment faire pour que sur un bouton "Sauver", je puisse faire d'abord la mise-à-jour en base de données de tout ce qui a changé et que ensuite le bindingsource soit mis-à-jour.

    J'ai bien

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(String info)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(info));
                }
            }

    mais il se délanche sur chaque modification de chaque élément. C'est lourd de faire à chaque fois une mise-à-jour en base de données.

    Je souhaiterais plutôt qu'on puisse modifier tout ce qu'on souhaite et ensuite que le binding se mette à jour

    Merci d'avance

    Gridin

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Qu'est ce qui déclenche la sauvegarde en base?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    C'est là que je bloque un peu car je ne sais pas "où le mettre" ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gridin Voir le message
    mais il se délanche sur chaque modification de chaque élément. C'est lourd de faire à chaque fois une mise-à-jour en base de données.

    Je souhaiterais plutôt qu'on puisse modifier tout ce qu'on souhaite et ensuite que le binding se mette à jour
    As-tu penser à jouer sur les différentes valeurs de la proprieté UpdateSourceTrigger de tes bindings ?

    Cette propriété te permet en résumé de définir à quel moment mettre à jour les données.

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour moi, la sauvegarde doit se faire via une commande et non sur un PropertyChanged

  6. #6
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    Ta sauvegarde dure ne se fait pas a chaque changement mais uniquement lorsque tu le decide, quand est-ce que tu mes a jour ta base de donnee.
    Tu fois faire la difference entre ta classe ou ViewModel ou tes changements sont repercutes et ta base de donnee.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Au niveau des UpdateSourceTrigger, j'utilise "Explicit" comme ca c'est moi qui peut décider du moment de l'update "ViewModel".

    J'utilise aussi une commande (icommand) afin de pouvoir lancer le code de sauvegarde dans le ViewModel.

    Mais maintenant dans le view model :

    Comment savoir l'élément sélectionné (je suppose que l'ObservableCollection devrait me le donner) ?

    Comment avoir les données qui ont été saisie (et vu le "explicit") ne sont pas encore à jour dans le ViewModel ?

    Merci

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Si tu utilises une ICollectionView et pas directement l'ObservableCollection, tu auras le CurrentItem.

    Un exemple d'utilisation :
    http://marlongrech.wordpress.com/200...iew-explained/

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Ok je vais regarder.
    Ce que j'ai fait pour l'instant, c'est que quand je sélectionne mon client dans le combo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SelectedItem="{Binding SelectedProduct}"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private Client selectedProduct;
            public Client SelectedProduct
            {
                get { return selectedProduct; }
                set { selectedProduct = value; OnPropertyChanged(new PropertyChangedEventArgs("SelectedProduct")); }
            }
    Maintenant, encore récupérer dans le viewmodel les nouvelles données imputées

    Merci l'aide que vous m'avez tous déjà apporter

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    J'suis pas sur qu'il y'ait grand interet à changer le comportement par défaut du updatesourcetrigger

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    Si je met "PropertyChanged" alors si je change le nom du client dans le textbox, le nom dans le combobox se modifie aussi.

    Je souhaite que le combo ne soit mis à jour que si la sauvegarde en BD s'est bien passée.

    Je veux éviter une désynchronisation entre le viewmodel et la base de données. Si la base de données est bien à jour alors je peux mettre le viewmodel à jour

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Tu peux peut-être creuser de ce côté :
    http://msdn.microsoft.com/en-us/libr...bleobject.aspx

  13. #13
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 657
    Par défaut
    Comment faire pour que sur un bouton "Sauver", je puisse faire d'abord la mise-à-jour en base de données de tout ce qui a changé et que ensuite le bindingsource soit mis-à-jour.
    Je suis en train de créer une appli avec une sauvegarde via sérialisation XML , donc les accès disques me posent pas mal de problèmes.

    J'ai décidé dans mon business layer de découpler les données de l'appli et les données à stocker dans la base , donc j'ai 2 objets du même type.

    Quand on appelle la commande sauvergarde , les données de l'appli sont copiées dans l'objet source de données , mais sans remise à jour des données de l'appli à moins de demander une mise à jour explicitement.
    Comme cela , l'utilisateur doit cliquer sur Save avant d'écrire les données à sérialiser, et recharger les données explicitement.

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 137
    Par défaut
    J'ai solutionné en utilisant un objet clone qui n'est mis à jour que si la sauvegarde se passe bien. Sinon je remet l'objet backup.

    Merci à tous

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

Discussions similaires

  1. MVVM - Mise à jour Model - ViewModels
    Par CaptainChoc dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 22/09/2011, 23h15
  2. [MVVM] Mise à jour de valeurs
    Par DotNET74 dans le forum Windows Phone
    Réponses: 13
    Dernier message: 09/06/2011, 18h23
  3. [Binding] Comment dissocier la validation et la mise à jour de la source ?
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 22/09/2008, 02h49
  4. Réponses: 1
    Dernier message: 07/05/2008, 18h09
  5. [C# 2.0] Mise à jour d'un DataGridView via le binding
    Par oodini dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/07/2006, 23h08

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