示例#1
0
        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();
                    }
                }
            }
        }