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.
Partager