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

Silverlight Discussion :

Probleme de mise a jour d'un TreeView.


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut Probleme de mise a jour d'un TreeView.
    Bonjour,

    Au sein d'un projet je dois réaliser un gestionnaire de groupes contenants des objets(Checkboxes). Ces groupes sont générés a partir d'un 'Dictionary<TKey, TValue>' ou chaque clef est le nom d'un groupe, et est donc un TreeViewItem, et ou chaque 'Value' est une classe contenant une 'ObservableCollection<Checkbox>'.

    Et voici la classe en question:
    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
     
    public class Groups : INotifyPropertyChanged
        {
            public ObservableCollection<CheckBox> GroupCheckboxes;
     
            public Groups()
            {
                GroupCheckboxes = new ObservableCollection<CheckBox>();
            }
     
            //InotifyPropertyChanged
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(string name)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }

    J'arrive a la générer sans problèmes et les checkboxes réagissent normalement. Plus tard dans mon programme je dois déplacer des checkboxes(une a la fois) d'un groupe a un autre avec la méthode suivante:

    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
     
    private void MoveItemToGroup(string from_group, string to_group)
            {
                object test = null;
     
                foreach (CheckBox cbx in ChamberGroup[from_group].GroupCheckboxes)
                {
                    if (cbx.Content.ToString() == ChamberList[Chamber.Selected_chamber].Chamber_name)
                        test = cbx;
                }
                if (test != null)
                {
                    Dispatcher.BeginInvoke(() => ChamberGroup[from_group].GroupCheckboxes.Remove((CheckBox)test));
                    Dispatcher.BeginInvoke(() => ChamberGroup[to_group].GroupCheckboxes.Add(ChamberList[Chamber.Selected_chamber].Chamber_Checkbox));
                }
                RefreshGroup();
            }

    Et voici comment je rafraichit l'UI:
    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
     
    private void RefreshGroup()
            {
                ChamberTreeView.Items.Clear();
     
                foreach (KeyValuePair<string, Groups> kvp in ChamberGroup)
                {
                    TreeViewItem tvi = new TreeViewItem();
     
                    tvi.ItemsSource = ChamberGroup[kvp.Key].GroupCheckboxes;
                    tvi.Header = kvp.Key;
                    ChamberTreeView.Items.Add(tvi);
                }
            }

    Le problème est que souvent cela mène a un freeze de mon application des que j'essaye d'ouvrir mes TreeViewItem après avoir déplacer un des objets d'une liste a l'autre. Je ne sais comment résoudre ce problème avec mes connaissances actuelles. J'ai tenter plusieurs choses mais tout recréer la même erreur. J'ai lu pas mal d'articles sur comment binder des classes récursivement et en utilisant les hierachicaldata, mais cela ne correspond pas du tout a ce que je dois faire, je dois absolument conserver mes classes actuelles.

    Si quelqu'un a une solution qui permette de conserver mes classes en l'état actuel je suis preneur.

    Cordialement, Ephismen.

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Pourquoi est ce que tu utilise des Checkbox dans tes classes data ?

    Normalement, tu ne manipule pas directement les contrôles qui "ne font que" représenter la hiérarchie qu'il y a dans tes données...

    Du coup les manipulations (transfert/copie d'une branche) se font sur tes données sans préoccupation de savoir si c'est sur le bon Thread ou autre...

    Bon courage,

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Comme dit jmix90, je pense que dans un premier temps, il va falloir que tu abstraies la notion de "groupe" de manière à ce que ce ne soit pas directement un checkbox... Le checkbox représente visuellement le groupe.
    J'ai lu pas mal d'articles sur comment binder des classes récursivement et en utilisant les hierachicaldata, mais cela ne correspond pas du tout a ce que je dois faire, je dois absolument conserver mes classes actuelles.
    Tes classes actuelles contiennent déjà des checkbox pour gérer des groupes au niveau représentation des données?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    En fait chaque checkbox représente un élément appartenant a un seul groupe. Ces checkboxs sont créer en code-behind et appartiennent a une classe "Élément" qui leur est propre. Lorsque je rafraichit ces éléments, les checkboxs sont ajouter a l'Itemsource du TreeViewItem qui leur correspond.
    Donc si je devais instancier de nouvelles checkboxs a chaque fois cela compliquerait grandement mon application car chaque checkbox est liée d'une manière particulière a un élément. Je vais réfléchir a une autre manière de créer mon TreeView mais je vois difficilement comment,

    Si quelqu'un a une idée pour éviter ce genre de complications je suis preneur!

    Cordialement, Ephismen.

  5. #5
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Re,


    Je ne comprends pas l'intéret d'instancier des checkbox...
    Les hierarchiala data template sont fiat pour cela : dans ton template tu as une checkbox avec IsChecked bindé sur la propriété booléenne de l'objet de ton model correspondant...

    Comme expliqué sur cette page :http://www.dev102.blogspot.com/2007/...mplate-in.html

    ++

Discussions similaires

  1. [SGBD] [MySQL] Problème de mise à jour d'une table
    Par philippef dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 13/01/2006, 15h42
  2. probleme de mise a jour automatique de windowd XP
    Par blandinais dans le forum Windows XP
    Réponses: 4
    Dernier message: 25/12/2005, 23h39
  3. probleme de mise a jour de la BD depuis un formulaire
    Par sebduduf dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/11/2005, 18h07
  4. [Refresh] Probleme de mise a jour graphique
    Par Clorish dans le forum Composants VCL
    Réponses: 4
    Dernier message: 25/07/2005, 18h44
  5. [] [Install] Problème de mise à jour des dll
    Par pepper dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 23/01/2003, 22h34

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