Как отсортировать коллекцию ComboBox.Items KeyValuePair <строка, строка> по значению? - PullRequest
4 голосов
/ 05 октября 2009

Я получаю KeyValuePair от службы , и некоторые значения не отсортированы, как показано ниже.

Как я могу прибегнуть к KeyValuePair по значению, чтобы они отображались в алфавитном порядке в ComboBox:

public NationalityComboBox()
{
    InitializeComponent();

    Items.Add(new KeyValuePair<string, string>(null, "Please choose..."));
    Items.Add(new KeyValuePair<string, string>("111", "American"));
    Items.Add(new KeyValuePair<string, string>("777", "Zimbabwean"));
    Items.Add(new KeyValuePair<string, string>("222", "Australian"));
    Items.Add(new KeyValuePair<string, string>("333", "Belgian"));
    Items.Add(new KeyValuePair<string, string>("444", "French"));
    Items.Add(new KeyValuePair<string, string>("555", "German"));
    Items.Add(new KeyValuePair<string, string>("666", "Georgian"));
    SelectedIndex = 0;

}

Ответы [ 4 ]

11 голосов
/ 05 октября 2009

Если вы получаете их от службы, я предполагаю, что они находятся в списке или в каком-то наборе?


Если вы используете список элементов, вы можете использовать метод расширения LINQ .OrderBy() для сортировки списка:
var myNewList = myOldList.OrderBy(i => i.Value);


Если вы получаете данные в виде DataTable, вы можете установить представление таблицы по умолчанию следующим образом:
myTable.DefaultView.Sort = "Value ASC";
3 голосов
/ 05 октября 2009

Когда вы связываете данные с ItemsControl (например, ComboBox, ListBox ...), вы можете управлять операциями сортировки, используя ICollectionViewInterface.По сути, вы извлекаете экземпляр, используя класс CollectionViewSource:

var collectionView = CollectionViewSource.GetDefaultView(this.collections);

Затем вы можете добавить сортировку, используя SortDescription:

collectionView.SortDescriptions.Add(...)
2 голосов
/ 05 октября 2009

Предполагая, что коллекция, возвращаемая службой, реализует IEnumerable<T>, тогда вы сможете сделать что-то вроде этого:

Items.Add(new KeyValuePair<string, string>(null, "Please choose..."));
foreach (var item in collectionReturnedFromService.OrderBy(i => i.Value))
{
    Items.Add(item);
}
2 голосов
/ 05 октября 2009

Просто предварительно отсортируйте список:

List<KeyValuePair<string, string>> pairs =
        new List<KeyValuePair<string, string>>( /* whatever */ );

pairs.Sort(
    delegate(KeyValuePair<string, string> x, KeyValuePair<string, string> y)
    {
        return StringComparer.OrdinalIgnoreCase.Compare(x.Value, y.Value);
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...