2009-07-27 12 views
3

J'ai des boîtes de groupe imbriquées, qui représentent logiquement des structures de données imbriquées dans mon application. Disons que j'ai une structure comme celle-ci:Liaison d'une propriété à une autre propriété

Dev1 
- CDev1 
- CDev2 
    - ICDev1 
    - ICDev2 

J'ai des cases à cocher pour activer/désactiver chacun de ces Devs. Je veux lier les cases à cocher CheckState de l'enfant à CheckState de la case parent. Je veux que le mécanisme fonctionne comme ceci: Quand je vérifie CDev2, ICDev1 & ICDev2 est automatiquement vérifié. Mais quand je décoche ICDev1, CDev2 reste dans son propre état. Fondamentalement, je veux que ces événements soient propagés aux enfants mais pas aux parents, comme la liaison à sens unique. J'utilise .Net 2.0 SP2. Je ne sais pas si c'est possible ou pas, donc je serais heureux si vous me montrez quelques indications à ce sujet. Si ce n'est pas possible, je vais implémenter des gestionnaires d'événements pour toutes les cases à cocher.

Répondre

5

Essayez ceci:

childCheckBox.DataBindings.Add("Checked", parentCheckBox, "Checked"); 

Vous pouvez également jeter un oeil à la commande TreeView, il a la possibilité d'afficher CheckBox à côté de chaque élément.

0

Ceci est théoriquement possible en utilisant la liaison bidirectionnelle dans WPF (voici un tutorial on data binding in WPF). Je ne pense pas que vous pouvez le faire automatiquement en utilisant WinForms. Si vous utilisez WinForms, vous devrez attraper et gérer les événements pour modifier manuellement les changements d'état de ce type.

0

La liaison ne résoudra pas votre problème. Si vous trouvez un moyen de lier ICDev1 et ICDev2 à CDev2, cela signifie que lorsque ICDev1 est cochée, ICDev1 et ICDev2 sont vérifiés et vice versa. Si c'est ce que vous voulez, vous n'avez pas besoin de cases à cocher pour ICDev1, ICDev2, seulement pour CDev2. Si vous voulez que l'utilisateur vérifie ICDev1, mais décochez ICDev2, vous devez implémenter des gestionnaires d'événements.

0

Il est possible dans WPF, mais je ne pense pas qu'il est possible WinForms parce qu'il n'y a pas de mécanisme d'événements de mise à jour de la propriété comme propriété de dépendance ou INotifyPropertyChanged dans WinForms

0

Jetez un oeil here et le link au Truss bibliothèque par Kent Boogart, qui contourne Winforms tout à fait. Cela peut toutefois nécessiter une sous-classe, en fonction de votre modèle, car elle fonctionne de la même façon que la liaison wpf.

Questions connexes