Questo manuale proprio non mi va giù :-)
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:
<ListView Margin="5" HorizontalAlignment="Stretch" 
          behaviors:DragDropManager.DataObject="{Binding Path=ItemsToDrag}"
          behaviors:DragDropManager.DataObjectType="myType"
          ItemsSource="{Binding Path=Items}">
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 :-)
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ì:
<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>
Wpf & Styles rulez!!!
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