void GongSolutions.Wpf.DragDrop.IDropTarget.Drop(DropInfo dropInfo) { TaskViewModel sourceTask = (TaskViewModel)dropInfo.Data; int oldIndex = ActiveTasks.IndexOf(sourceTask); int newIndex = dropInfo.InsertIndex; if (oldIndex >= 0) { if (newIndex < oldIndex) { // move the item up in the list toward the top ActiveTasks.Move(oldIndex, newIndex); List <TaskViewModel> tasksToSave = new List <TaskViewModel>(); // update our sort order values for (int i = newIndex; i < oldIndex; i++) { TaskViewModel currentTaskVM = ActiveTasks[i]; TaskViewModel nextTaskVM = ActiveTasks[i + 1]; int currentSortOrder = currentTaskVM.SortOrder.Value; int nextSortOrder = nextTaskVM.SortOrder.Value; currentTaskVM.SortOrder = nextSortOrder; nextTaskVM.SortOrder = currentSortOrder; tasksToSave.Add(currentTaskVM); if (i + 1 == oldIndex) { tasksToSave.Add(nextTaskVM); } } foreach (TaskViewModel updatedTask in tasksToSave) { updatedTask.Save(); } } else if (newIndex > oldIndex) { // move the item down in the list toward the bottom ActiveTasks.Move(oldIndex, newIndex - 1); List <TaskViewModel> tasksToSave = new List <TaskViewModel>(); // update our sort order values for (int i = newIndex - 1; i > oldIndex; i--) { TaskViewModel currentTaskVM = ActiveTasks[i]; TaskViewModel previousTaskVM = ActiveTasks[i - 1]; int currentSortOrder = currentTaskVM.SortOrder.Value; int previousSortOrder = previousTaskVM.SortOrder.Value; currentTaskVM.SortOrder = previousSortOrder; previousTaskVM.SortOrder = currentSortOrder; tasksToSave.Add(currentTaskVM); if (i - 1 == oldIndex) { tasksToSave.Add(previousTaskVM); } } foreach (TaskViewModel updatedTask in tasksToSave) { updatedTask.Save(); } } } }