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 :

Binding two way deux ObservableCollection


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut Binding two way deux ObservableCollection
    salut à tous

    1) lien Control _ObservableCollection :
    WPF on fait un lien (Binding two way) entre un Control et une collection (ObservableCollection ).

    2) mais comment on fait un Binding two way entre deux ObservableCollection ?

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Ton objectif est de :
    1. Mettre à jour le contenu d'un observableCollection selon une seconde (add/remove item) ?
    2. Mettre à jour les propriétés des objets de tes collection (set sur item spécifique) ?

    Dans tous les cas, je pense qu'il te faudra un objet manager pour ce traitement, référençant tes 2 listes et étant abonné aux événements...

    L'option B serait d'avoir la même référence pour les 2 Collections, mais je ne sais pas si cela s'applique à ton contexte...

    De plus il faut tenir compte des instances différentes pour un même objet (ou alors c'est la même référence dans les deux listes et alors je ne vois pas l'intérêt d'être notifié, vu que le 2 sera mis à jour par référence), et donc prévoir un code unique pour identifier l'item à chaque fois je pense.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Arnard Voir le message
    Ton objectif est de :

    Dans tous les cas, je pense qu'il te faudra un objet manager pour ce traitement, référençant tes 2 listes et étant abonné aux événements...
    une objet manager ? cette option pourra elle etre un peut générique?

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class Manager<T>
    {
      private ObservableCollection<T> coll1;
      private ObservableCollection<T> coll2;
     
      public ObservableCollection<T> Collection1
      {
         get { return coll1; }
         set 
         {
             if(coll1 != null)
             {
                 coll1.CollectionChanged -= Collection_Changed;
                 coll1.PropertyChanged -= Property_Changed_Coll1;
             }
     
             coll1 = value;
     
             if(coll1 != null)
             {
                 coll1.CollectionChaned += Collection_Changed;
                 coll1.PropertyChanged +=  Property_Changed_Coll1;
             }
         }
      }
     
    //IDEM POUR LA PROP Collection2
     
      private void Collection_Changed(object sender, NotifyCollectionChangedEventArgs ea)
      {
         //Traitement de la mise à jour de la liste selon sender si liste cible non null
         if(sender == coll1 && coll2 != null)
         {
           //Mise à jour de Coll2 selon infos dans Coll1
         }
         else if(sender == coll2 && coll1 != null)
         {
           //Mise à jour de Coll1 selon infos dans Coll2
         }
      }
     
      private void Property_Changed_Coll1(Object sender, PropertyChangedEventArgs ea)
      {
           UpdateProperty(coll2, sender as T, ea);
      } 
     
     
     
      private void Property_Changed_Coll2(Object sender, PropertyChangedEventArgs ea)
      {
           UpdateProperty(coll1, sender as T, ea);
      } 
     
    ///Met à jour l'entité donné sur la collection cible avec les infos de changements
       private void UpdateProperty(ObservableCollection<T> collectionToUpodate, T entity, PropertyChangedEventArgs ea)
      {
          //on a toutes les billes pour mettre l'entité à jour dans la collection cible
          //Rechercher l'entité dans la collection d'après l'identifiant dans entity.
          //Ne pas mettre à jour entity directement, il vient de la collection source !!
      }
    }
    Quelque chose dans ce goût là je dirais

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    ha oui

    donnes moi ton avis sur l'idée suivante :

    je voudrais utiliser une listBox (WPF) comme support visuel d'un Graph (plusieurs nœuds, plusieurs liens).
    je ne veux pas utiliser une TreeView.

    je voudrais exprimer les liens entre les tables (le mapping relationnel de ma database).

    je crée une Table Relation qui doit être à l'écoute des tables de mon DataSet (c'est là ou j'utilise ton Manager), mais pas seulement, cette Table doit exister pour permettre l'ajout de relations entre mes objets , des relations qui ne doivent pas être uniquement relationnelle.

    Exemple :

    deux Tables :
    Table Ville.
    Table Établissement.
    bien sure une relation naturelle entre ces deux Tables permettra de dire ville1 contient etablissement15.

    mais ma Table Relation me permettra de dire : etablissment12 est lié à etablissement36 : relation =relation commerciale.

    le faite de faire un Manager pour bien lier la grande TableRelation et les liens relationnelle ainsi que les lien de type "commerciale" ou "évènement culturel" ou tout ce que nous voulons, cela permettra :

    DataBinding : ListBox <->TableRalation
    Manager : TableRelation<->DataSet

    donnes moi ton avis :
    bizzar , fou ou faisable?

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Si on considère Relation comme étant un objet en lui même, référençant deux Etablissements avec type d'activité, une collection de Relation à surveiller directement ne serait pas plus simple ? Et sur maj de la collection, update des éléments de l'UI ?

    Mais honnêtement je ne sais pas trop quoi en penser

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    bon

    merci pour le Manager.

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

Discussions similaires

  1. Databinding two-way conditionnel
    Par MigsFR dans le forum Flex
    Réponses: 2
    Dernier message: 05/03/2012, 15h34
  2. Entity Framework et Two way binding avec Grid
    Par rdh123 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 28/11/2010, 15h53
  3. Binding TwoWay entre deux contrôles
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 28/10/2009, 18h01
  4. Binding entre deux UserControl
    Par mehdi_ouni dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 11/03/2008, 16h10
  5. naviguer entre deux binding sources
    Par salihovic dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2008, 14h02

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