2017-08-17 4 views
-1

J'ai une TreeView avec case à cocher. J'ai vu quelques exemples en ligne pour montrer comment lier ensemble checkbox parent/enfant en utilisant INotifyPropertyChanged. Cependant, ce que j'essaye de réaliser est quelque chose de plus que cela.Manipuler TreeView avec CheckBox

En supposant que j'ai 2 autre objet

principal objet

public class MainObject 
{ 
    public string Name; 
    public List<SubObject> SubObjects; 
    public bool? IsChecked; 
    //other parameters 
} 

Sous Objet

public class SubObject 
{ 
    string Label; 
    public bool? IsChecked; 
    //other parameters 
} 

TreeView Afficher

- Main_Object_1(Name) 
    - Sub_Object_1(Label) 
    - Sub_Object_2(Label) 
- Main_Object_2(Name) 
    - Sub_Object_3(Label) 

I ont 3 objectifs:

1) Parent/Enfant association de case à cocher

Objet principal et objet sous reflètera l'état correct en fonction de la case à cocher est cliqué.

Si la case Objet principal est cochée, tout le sous-objet sera vérifié.

Si l'un de l'objet sous est cochée, l'objet principal sera nul (entièrement rempli avec un peu de couleur)

2) association ensemble différent

À tout moment, un jeu (Main_Object_1 ou Main_Object_2) peut être vérifié.

En supposant que "Main_Object_2" et "Sub_Object_3" sont cochés. Lorsque vous cochez "Main_Object_1" ou "Sub_Object_1" ou "Sub_Object_2", "Main_Object_2" et "Sub_Object_3" sont désactivés.

3) Exécution d'autres tâches à côté de la mise à jour de l'affichage des cases à cocher

je devrai effectuer d'autres tâches en fonction du nœud est cochée/décochée.

Un pointeur sur la façon d'y parvenir? Merci.

+0

Si les attributs de données de classe sont déclarés en tant que champs ('public bool? IsChecked;'), vous ne pourrez même pas les afficher via une liaison. Cependant, s'il s'agit de propriétés ('public bool? IsChecked {get; set;}'), vous pouvez écrire * any * dans setter et implémenter les exigences 1.2.3. avec un certain effort investi – ASh

Répondre

0

J'ai réussi à sortir la sortie que je voulais en ajoutant une propriété IsChecked et une propriété parent et une propriété Set. Après quoi j'ai ajouté une logique pour manipuler l'état de la case à cocher. Pour l'objectif 3, j'ajoute simplement un gestionnaire d'événements checked pour effectuer la tâche dont j'ai besoin.