/// <summary> /// Handles dropping listviewitem for reordering /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void lvRight_Drop(object sender, DragEventArgs e) { if (CanDragReorder) { RecordEntitySetting droppedData = e.Data.GetData(typeof(RecordEntitySetting)) as RecordEntitySetting; RecordEntitySetting target = ((ListBoxItem)sender).DataContext as RecordEntitySetting; int sourcePos = SelectedList.IndexOf(droppedData); int destPos = SelectedList.IndexOf(target); if (sourcePos < destPos) { SelectedList.Insert(destPos + 1, droppedData); SelectedList.RemoveAt(sourcePos); } else { sourcePos++; if (SelectedList.Count + 1 > sourcePos) { SelectedList.Insert(destPos, droppedData); SelectedList.RemoveAt(sourcePos); } } lvRight.ItemsSource = SelectedList.ToList(); UpdateReorderButtons(); } }
/// <summary> /// Add visual indicator of drag n drop location /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ListViewItem_DragOver(object sender, DragEventArgs e) { if (CanDragReorder) { var lvi = sender as ListViewItem; RecordEntitySetting droppedData = e.Data.GetData(typeof(RecordEntitySetting)) as RecordEntitySetting; RecordEntitySetting target = ((ListBoxItem)sender).DataContext as RecordEntitySetting; int sourcePos = SelectedList.IndexOf(droppedData); int destPos = SelectedList.IndexOf(target); lvi.BorderBrush = new SolidColorBrush(Colors.Black); if (sourcePos > destPos) { lvi.BorderThickness = new Thickness(0, 1, 0, 0); lvi.Padding = new Thickness(5, 1, 5, 2); } else if (sourcePos < destPos) { lvi.BorderThickness = new Thickness(0, 0, 0, 1); lvi.Padding = new Thickness(5, 2, 5, 1); } } }