Wpf: “Drag & Drop” Behavior, okkio :-)
Pochissimi giorni fa ho introdotto nel mio toolkit un behavior per generalizzare la gestione del Drag & Drop, a breve il tutto probabilmente finirà su CodePlex, ma non è questo l’argomento odierno.
Houston abbiamo un problema
Nel post di cui sopra, per agganciare il behavior ad una ListView facevamo:
Funzionare funziona ma ha l’effetto collaterale di permettere il drag & drop di qualsiasi cosa si trovi all’interno della ListView, compresi eventuali column header e scrollbar… poco simpatico :-)<ListView Margin="5" HorizontalAlignment="Stretch" behaviors:DragDropManager.DataObject="{Binding Path=ItemsToDrag}" behaviors:DragDropManager.DataObjectType="myType" ItemsSource="{Binding Path=Items}">
Se ci pensiamo bene in realtà è giusto così, anche con un’implementazione “tradizionale” del drag & drop avremmo lo stesso problema, solo che con un’implementazione tradizionale possiamo discernere direttamente nell’handler chi sia la “cosa” che stiamo draggando mentre qui è un po’ più complesso.
Per ora però ho risolto così:
Wpf & Styles rulez!!!<ListView Margin="5" HorizontalAlignment="Stretch" ItemsSource="{Binding Path=Persons}"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="behaviors:DragDropManager.DataObject" Value="{Binding}" /> <Setter Property="behaviors:DragDropManager.DataObjectType" Value="mySampleType" /> Style> ListView.ItemContainerStyle>
Sposto cioè l’assegnazione del behavior sui singoli ListViewItem e il problema scompare, l’effetto collaterale di questa cosa per ora è che non c’è mezzo di draggare più item(s) insieme, ma non mi serve. Ho anche in mente un altro paio di possibilità e miglioramenti, vedremo.
.m