Bonjour,
Voici donc mon problème :
- Dans mon modèle j'ai une classe Document qui contient une collection observable que j'appele Items
- Cette collection d'Items est representé sur un ItemsControl (Canvas) (effectué par un binding sur la proprieté Items de l'objet Document et l'ItemsSource)
- Cette même collection est aussi representé sur un ListBox (binding sur l'ItemsSource)
Jusque là tout va bien ... si je supprime ou que je rajoute un Item en passant par l'un ou l'autre des representations je n'ai rien a faire tout est mis à jour automatiquement (vive WPF )
La deuxième étape de mon développement consistait à pour pouvoir effectuer des selections multiples de ces Items soit par le biais de l'ItemsControl (Canvas) ou la ListBox : voici ma façon de l'implémenter
- Dans le modèle, dans la classe Document j'ai ajouté une liste d'Items que j'ai appelé SelectedItems
- A chaque fois que je selectionne un Items sur l'IHM un evenement est déclenché par l'originaire de la selection (Canvas ou la ListBox) et envoit la nouvelle liste au modèle qui met à jour la sienne puis declenche un evenement pour mettre a jour l'IHM.
- Le probleme est que pour detecter la selection sur la ListBox j'ecoute l'evenement SelectionChanged puis je recupère la liste SelectedItems (je suis en selection multiple) et je l'envois au modèle qui la copie dans sa liste SelectedItems puis declenche l'evenement pour la mise à jour coté Canvas mais aussi coté ListBox OR lorsqu'on reçoit cet event coté ListBox on met à jour sa liste SelectedItems (pour se mettre à jour) ET ceci déclenche l'evenement ... SelectionChanged qui appelle la mise à jour du modèle ... et ainsi de suite ......
Je doute fort donc que ma façon de faire soit la bonne et je suis sûr que ce genre de problèmes a déjà été rencontré auriez vous une façon plus correcte de faire ça (au début je pensais que de la même façon que j'ai fait avec les Items en les bindant avec la liste Items de mon modèle je ferais de même pour les SelectedItems mais en fait cette dernière est read-only dommage)
Merci d'avance ... j'espère que j'ai pu bien expliquer mon problème
Je reste bien entendu à votre disposition pour plus d'eclaircissement
Cordialement
Partager