постоянная сортировка коллекции - PullRequest
0 голосов
/ 12 августа 2011

У меня есть наблюдаемая коллекция, которая предоставляется пользователю из источника collectionview.Одним из свойств элементов в коллекции является сортировка.Я пытаюсь разрешить пользователю постоянно прибегать к этой коллекции и распространять изменения в БД.

У меня работает CVS, где я могу прибегнуть к отдельным элементам, отображаемым в списке.Однако теперь я должен изменить item.sortorder == cvs.currentindex, и у меня возникают проблемы с поиском правильного способа сделать это.

РЕДАКТИРОВАТЬ

очевидно, яне было достаточно ясноSortorder - это поле в моей БД, которое является частью моего объекта и позволяет пользователю контролировать положение элементов, отображаемых в элементах управления списком.Я пытаюсь дать своему пользователю возможность изменить порядок сортировки этих элементов в будущем, изменив значение поля сортировщика так, чтобы оно равнялось текущему индексу отображаемого элемента.

Элемент Текущее значение сортировщика равно 3.

пользователь перемещает отображаемый элемент списка в позицию 0 (т. Е. В первую позицию)

items новый сортировщик = 0 элемент с оригинальным сортировщиком станет 1 и т. Д.

это может быть достигнуто цикломотсортированный CVS и создание Item.SortOrder = CVS.Item.index

Ответы [ 2 ]

0 голосов
/ 12 августа 2011

Я понял это.

Я вернулся и посмотрел на код, который использовал для изменения положения элементов, и я фактически использую саму коллекцию:

private void OnDecreaseSortOrderCommandExecute()
        {
            int index = QuestionsCVS.View.CurrentPosition;
            QuestionsViewModel item = SelectedQuestionVM;

            if (item != null && index > 0)
            {
                SortableQuestionsVMCollection.RemoveAt(index);
                SortableQuestionsVMCollection.Insert(index - 1, item);
                QuestionsCVS.View.Refresh();
                QuestionsCVS.View.MoveCurrentTo(item);
            }
        }

Итак, я просто сделал это:

private void ResortSortableQuestionsVMCollection()
        {
            for (int i = 0; i < SortableQuestionsVMCollection.Count; i++)
            {
                SortableQuestionsVMCollection[i].SortOrder = i;
            }
        }

Я не знаю, будет ли это работать при любых обстоятельствах, но он определенно сделал то, что хотел для этого.

0 голосов
/ 12 августа 2011

Базы данных возвращают строки из таблицы, как правило, в порядке, в котором они были добавлены в таблицу, если вы не укажете в запросе предложение order by.изменение порядка в базе данных не очень хорошая идея.вместо этого попробуйте что-нибудь, например, с помощью параметризованного запроса и передачи в столбце и направлении, которое вы хотите отсортировать, полученном из предпочтений пользователя.

...