Хорошо, я нашел способ сделать это. Я связал ItemDragCompleted
событие ListBoxDragDropTarget
и сделал следующее:
private void dropTarget1_ItemDragCompleted(object sender, ItemDragEventArgs e)
{
var tmp = (e.DragSource as ListBox).ItemsSource.Cast<MyClass>().ToList();
SelectionCollection selectionCollection = e.Data as SelectionCollection;
if (selectionCollection != null)
{
MyClass cw = selectionCollection[0].Item as MyClass;
int idx = tmp.IndexOf(cw);
if (idx == tmp.Count - 1)
{
tmp.Remove(cw);
tmp.Insert(tmp.Count - 1, cw);
MyListBox.ItemsSource = new ObservableCollection<MyClass>(tmp);
}
}
}
Поскольку DragSource представляет список, с новым «расположением» элементов, поэтому я могу проверить, находится ли элемент в конце, и переместить его в этом случае.
Единственная оставшаяся проблема заключается в том, что она вызывает мерцание на экране из-за того, что предмет был уронен, а затем перемещен.
Я все еще открыт для любого другого (лучшего) предложения.