Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#/WPF] - Rendre editable une cellule

    22 septembre 2017 à 12:08:08

    Bonjour,

    Alors je suis en train de dev une application en WPF, et je me heurte à un problème.

    J'ai une datagrid composé de plusieurs ColumnTextBox et de 1 ColumnCombobox. les colonnes de textes sont en ReadOnly, et j'aimerais que selon la sélection de ma combobox, la ligne correspondante deviennent éditable.

    Petite image de ce a quoi ma DataGrid ressemble : 

    Pour info, ma Datagrid est bindé a une liste d'objet, chaque colonne étant bindé a une des propriété de l'objet.

    Donc je voudrais que selon ma sélection dans ma Combobox, la ligne en question devienne éditable. J'ai eu beau chercher sur le net j'ai pas trouver de réponses à mon problème.

    Merci par avance du temps que vous me consacrerez :)

    • Partager sur Facebook
    • Partager sur Twitter
      25 septembre 2017 à 16:41:33

      Ok alors j'ai un peu de nouveau de mon coté,

      J'ai trouvé ça sur SO, seul problème c'est que je comprend rien a ce qui est fait...

      Si quelqu'un pourrait m'aider a comprendre les histoires de VisualTree et de GetParent je l'en remercierai :)

      Pour moi les parents et les childs je m'en servais juste dans mes fichiers xml, alors dans une datagrid je suis perdu ^^ 

      Merci d'avance :)

      • Partager sur Facebook
      • Partager sur Twitter
        25 septembre 2017 à 17:47:33

        Les composants graphiques sont aussi dans des arborescences.

        Le pire, c'est quand WPF, il existe plusieurs arborescences (je ne connais pas assez WPF, donc je vais pas les nommer).

        Donc, je te conseille de prendre le code et de le tester avant de chercher à le comprendre.

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          26 septembre 2017 à 8:47:51

          Effectivement, bacelar à vu juste.

          En WPF, il y a l'arbre logique et l'arbre visuel. Je pense pouvoir affirmer que le code XAML ne contient qu'un arbre logique dont la translation vers l'arbre visuel est souvent en relation 1-1. Comprendre : Quand tu fais "<Grid><ComboBox/></Grid>", tu peux faire une translation 1-1 et l'arbre visuel sera - à quelques détails près - exactement le même que l'arbre logique que tu avais écris.

          Le premier contient une sorte de description ou de métadonnée. Le second, c'est l'arbre réellement utilisé lors de l'exécution de ton application.

          La DataGrid est un excellent exemple pour distinguer les deux.

          Quand tu fais une DG en WPF, ce que rédige directement à l'intérieur du tag <DataGrid> concerne majoritairement l'arbre logique. Cet arbre logique va décrire la tête de ta grille, avec des DataGridColumn. Lorsque l'appli s'exécute, la DG va fabriquer un arbre visuel à partir de l'arbre logique et de la source de données. Quand tu navigueras dans l'arbre, tu auras donc à faire à une DG composée de DataGridRow, elles même composées de DataGridCell.

          Pour naviguer dans l'arbre logique, c'est simple : Ouvre ton fichier XAML et édite le. Pour naviguer dans l'arbre visuel en revanche, tu seras obligé de passer par un outil pour t'y aider : La classe VisualTreeHelper.

          Ce que propose le lien que tu as posté, c'est de naviguer dans l'arbre visuel afin de changer certaines propriétés pour rendre des DataGridCell existantes en ReadOnly, éditable.

          Cela dit, quand tu sais ce que j'ai décris avant, tu peux envisager l'arbre visuel qui découlera de l'arbre logique. Ainsi, tu peux venir attacher (avec le Blend SDK) des triggers & actions qui viendront modifier l'arbre visuel, tout ça, depuis l'arbre logique (en XAML donc). Et si besoin, tu peux t'aider de cet outil très puissant qu'est Snoop. A l'image du débugguer Visual Studio, il peut s'attacher à un processus WPF existant et t'offrir une navigation sympa à travers l'intégralité de son (ou ses) arbres visuels.

          • Partager sur Facebook
          • Partager sur Twitter
            26 septembre 2017 à 13:22:57

            Merci Nisnor pour ces précisions, je comprend mieux maintenant,

            Je vais continuer a checker tout ça et je reviens pour passer le sujet en résolu dès que j'ai une solution convenable.

            • Partager sur Facebook
            • Partager sur Twitter
              26 septembre 2017 à 14:21:37

              Ici, tu auras la distinction entre les deux types d'arbre.
              • Partager sur Facebook
              • Partager sur Twitter

              [C#/WPF] - Rendre editable une cellule

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown