Можно отсортировать список только один раз, не знаю почему (WPF) - PullRequest
0 голосов
/ 28 октября 2009

Вопрос: Какие изменения необходимо внести в мой код, чтобы разрешить сортировку более одного раза?


Информация:

У меня есть список, содержащий 1000 образцов отправлений, в программе, которую я сейчас пишу, я обнаружил, что самый простой способ сортировки этих отправлений одним нажатием кнопки выглядит так:

Private Sub Date_Ascending_Selected(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Date_Ascending.Selected
    ShipmentsList.Items.SortDescriptions.Add(New SortDescription("ReceivedOn", ListSortDirection.Ascending))
End Sub

Проблема в том, что он работает только один раз. В настоящее время у меня есть 4 из них (Date Asc and Des, Status Asc и Des) с потенциалом целых 30. Я хотел бы иметь возможность сортировать более одного раза, но я не уверен, как это исправить. Моя интуиция говорит мне, что проблема заключается в «Новой» части, но я не знаю, где еще мне ее поставить.

1 Ответ

0 голосов
/ 28 октября 2009

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

Если ваша цель - сортировка по столбцу A и столбцу B, вы должны сделать что-то вроде следующего:

ShipmentsList.Items.SortDescriptions.Add(New SortDescription("A", _
    ListSortDirection.Ascending))
ShipmentsList.Items.SortDescriptions.Add(New SortDescription("B", _
    ListSortDirection.Ascending))

, что может привести к следующему порядку:

A B
1 х
1 z
2 а
2 д

Если ваша цель - прекратить сортировку по A, а теперь сортировать по B, вы бы сделали что-то вроде этого:

' set initial sort
ShipmentsList.Items.SortDescriptions.Add(New SortDescription("A", _
    ListSortDirection.Ascending))
'... later, we now want to sort by B
ShipmentsList.Items.SortDescriptions.Clear()
ShipmentsList.Items.SortDescriptions.Add(New SortDescription("B", _
    ListSortDirection.Ascending))

Очистив коллекцию описаний сортировки, вы удаляете SortDescription для A и заменяете ее на одну для B, а не добавляете одну для B после. Это приведет к следующему порядку:

A B
2 а
2 д
1 х
1 z

...