WPF Listbox.selecteditems возвращает элементы в порядке их выбора - PullRequest
4 голосов
/ 24 февраля 2010

Я отлаживал программу коллег и наткнулся на эту проблему в WPF.

Похоже, listBoxName.SelectedItems возвращает список выбранных элементов в порядке, в котором пользователь выбирает элемент из интерфейса. Это проблема, потому что мне нужно сохранить фактический порядок пунктов.

Пример:

список находится в расширенном режиме выбора, и мой список содержит что-то: runfirst, runsecond, runthird

пользователю предоставляется возможность выбрать то, что он хочет запустить на основе списка. Они выбирают runthird, затем запускают сначала. Это приводит к тому, что runthird появляется вверху списка, а затем запускается первым. Я думаю, я мог бы отсортировать список перед запуском foreach, но мне было интересно, есть ли более простой способ.

Спасибо

Ответы [ 3 ]

9 голосов
/ 24 февраля 2010

Я использовал LINQ для возврата выбранных элементов в порядке индекса. Это в синтаксисе VB.Net, но это должно быть легко исправить для C #.

Dim selecteditems = From selecteditem As ListBoxItem In ListBox1.SelectedItems _
                    Select selecteditem _
                    Order By ListBox1.Items.IndexOf(selecteditem)
3 голосов
/ 24 февраля 2010

Да, я закончил итерацией по всем элементам в списке и затем проверил, было ли это в выбранных элементах, используя параметр содержит, как показано ниже

            foreach (<yourobject> item in listForSelection.Items)
            {
                if (listForSelection.SelectedItems.Contains(item))
                {
                     \\code here
                }
            }

Спасибо за помощь, ребята

1 голос
/ 24 февраля 2010

Я думаю, что вы дали ответ на свой вопрос.

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

Вы можете использовать те же Comparison<T> или IComparer<T>, которые использовались для сортировки исходного списка. Если вы привязываетесь к SelectedItems, вы можете использовать IValueConverter для сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...