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

C# Discussion :

ObservableCollection WPF et évènement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut ObservableCollection WPF et évènement
    Bonjour,


    Je voudrai savoir comment actualiser une ObservableCollection quand celle-ci n'est pas directement impacté, je m'explique :

    J'ai un ViewModel CommandeFournisseurLigne qui contient uen ObservableCollection de lignes de commande qui est chargé 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
    21
    22
    23
    24
    25
    26
     
            private ObservableCollection<CommandeFournisseurLigne> _ListeCommandeFournisseurLignes = null;
            public ObservableCollection<CommandeFournisseurLigne> ListeCommandeFournisseurLignes
            {
                get
                {
                    if (_ListeCommandeFournisseurLignes == null)
                    {
                        var statusesToTest = CommandeFournisseur.EtatCommandeFournisseur.Annuler.ToCode();
     
                        _ListeCommandeFournisseurLignes = new ObservableCollection<CommandeFournisseurLigne>(
     
                            (from CFL in DataAccess.EntitiesContext.Context.CommandeFournisseurLignes
                             from P in DataAccess.EntitiesContext.Context.Personnes
                             where CFL.CommandeFournisseur.IDPersonneDemandeur == P.ID
                             && P.IDAffectationSociete == DataAccess.EntitiesContext.Context.IDAffectationSocieteCourant
                             && (CFL.CommandeFournisseur.DateCommande > DateTimeOutil.PremierJanvier)
                             &&(CFL.CommandeFournisseur.CodeEtat!=statusesToTest)
                             select CFL).ToList());
     
     
                    }
     
                    return _ListeCommandeFournisseurLignes;
     
                }

    Pour chacune de ces lignes j'ai un bouton qui me permet d'afficher le détail de la CommandeFournisseur qui la concerne dans une popup maison à laquelle j'ai passé en paramètre un ViewModel de type CommandeFournisseur créé à partir de la ligne sélectionnée.

    Cette popup n'est en fait rien de plus qu'un ViewModel de type CommandeFournisseur avec son propre affichage.


    Le problème de cette fenêtre est le fait est que je peux supprimer une CommandeFournisseurLigne (une ligne de détail) de la CommandeFournisseur en cours et qu'il faudrait que je modifie la liste de départ affichée (ListeCommandeFournisseurLignes).

    Comme le ViewModel affiché dans la popup est de type CommandeFournisseur il a sa propre liste de CommandeFournisseurLignes, donc lorsque je supprime un enregistrement de cette liste, je la supprime du dataContext et de la liste de la CommandeFournisseur mais pas de ma liste de départ.

    J'ai bien pensé à passer _ListeCommandeFournisseurLignes à Null , ce qui provoque une recharge complète de la liste, mais ceci me fait avoir un peut de latence, (requête + rechargement de toutes les lignes)

    Je ne sais donc pas comment mettre à jour cette première liste sans avoir un coup de lag...

    L'autre issue que je vois est là suppression de la ligne dans ListeCommandeFournisseurLignes qu'il faudrait passer en paramètre.

    Qu'en pensez-vous ? Puis-je faire d'une autre manière (system d'évènement que je connais pas très bien) ?

    Pour mieux comprendre voici un aperçu visuel :
    Nom : Sans titre.png
Affichages : 207
Taille : 122,9 Ko

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Le ViewModel utilisé par la popup peut conserver une référence à l'ObservableCollection de la vue principale.

    Puis dans le gestionnaire de la commande "supprimer" il n'a plus qu'à faire un principalCollection.Remove(elementToRemove).

    Le seul hic est si tu veux éventuellement gérer l'annulation de l'opération pour réinsérer les éléments supprimés au bon endroit...

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut
    Merci pour les infos.

    Mais comme tu le précises, je risque d'avoir des ennuis si j'annule les modifs.

    Crois-tu qu'il me serait possible de faire ça avec des évènements ?


    Sinon je vais essayer de pallier au problème en créant une liste de modif avec une string qui pourra me permettre de savoir si il s'agit de suppression ou ajout ; cela me permettra de rajouter une fonction de réalisation sur la liste principale.

    J'aurai plus qu'à l'appeler à la fin de mon delegate qui affiche ma popup.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Si tu veux gérer l'annulation tu n'as pas à synchroniser les 2 collections en live, tu peux te contenter de garder la trace des éléments supprimés et si l'utilisateur confirme tu les supprimes de la collection principale au moment de fermer la popup.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Par défaut
    garder la trace des éléments supprimés
    Comment puis-je faire ça ? via une autre collection ?

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Oui exactement, une simple List<> fera l'affaire.

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

Discussions similaires

  1. [Débutant] ObservableCollection dans une ObservableCollection WPF C#
    Par viktor56 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 23/02/2015, 16h39
  2. WPF - Binding évènement "PreviewTextInput" TextBox
    Par souhe_nits dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 11/06/2014, 12h04
  3. [Débutant] CustomControl WPF et évènements
    Par Rainui dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 30/12/2012, 00h07
  4. [Débutant] CustomControl WPF Et évènements
    Par Rainui dans le forum VB.NET
    Réponses: 0
    Dernier message: 29/12/2012, 19h55
  5. déclencheur d'évènement WPF
    Par damii1 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 17/04/2009, 08h19

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