J'ai une liste hiérarchisée de catégories que j'affiche avec un TreeView.
J'ai implémenté un drag drop pour déplacer les catégories dans d'autres catégories. En clair : pour modifier la catégorie parente d'une catégorie.
Par contre, je rencontre un problème un peu con : je peux déplacer une catégorie A vers une de ses catégories descendantes A1, A1a, etc...
En imaginant qu'on ait une hiérarchie du genre A ( A1 ( A1a, A1b, ...), A2, ...), B, ...
Alors évidemment ça pose problème, parce que déjà c'est pas du tout logique vis à vis des données et qu'ensuite, le TreeView n'est pas capable d'afficher un graphe.
J'ai donc implémenté une méthode "CanMove(Category src, Category dst)" qui me permet de déterminer si on peut déplacer la catégorie src dans la catégorie dst. (dst pouvant être nulle, dans le cas où on déplace src dans la racine).
Ensuite, j'ai utilisé cette méthode dans l'eventhandler DragOver de mon treeview :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private void tree_DragOver(object sender, DragEventArgs e) { if ( e.Data.GetDataPresent(typeof(Category)) && this.Editor.CanMove( ( Category )e.Data.GetData(typeof(Category)), (e.OriginalSource as FrameworkElement).DataContext as Category ) ) { e.Effects = DragDropEffects.Move; } else { e.Effects = DragDropEffects.None; } }
Et, ça ne suffit apparemment pas, dans la mesure où je peux toujours déplacer mes catégories n'importe où.
Alors, j'ai également fait le test CanMove dans l'eventhandler Drop du treeview, et dans ce cas, ça marche. On ne peut plus déplacer les catégories n'importe où, mais malheureusement, c'est moche, lors du drag drop, le curseur garde la forme "déposer ici" plutôt que "drop impossible", même quand je passe sur des catégories descendantes de la catégorie en cours de déplacement...
Partager