如何按键值对KeyValuePair <string,string>的ComboBox.Items集合进行排序?</string,string>

时间:2009-10-05 14:31:04

标签: c# wpf sorting combobox

我从服务获取了一个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 个答案:

答案 0 :(得分:11)

如果你从服务中获取它们,我会认为它们是列表或某种类型的集合?

<小时/> 如果您使用的是项目列表,则可以使用LINQ扩展方法.OrderBy()对列表进行排序:

var myNewList = myOldList.OrderBy(i => i.Value);

<小时/> 如果您将数据作为DataTable获取,则可以设置表的默认视图,如下所示:

myTable.DefaultView.Sort = "Value ASC";

答案 1 :(得分:3)

当您对ItemsControl(例如ComboBoxListBox ...)进行数据绑定时,您可以使用ICollectionViewInterface管理排序操作。基本上,您使用CollectionViewSource类检索实例:

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

然后您可以使用SortDescription添加排序:

collectionView.SortDescriptions.Add(...)

答案 2 :(得分:2)

只需对列表进行预先排序:

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);
    }
);

答案 3 :(得分:2)

假设从服务实现IEnumerable<T>返回的集合,那么您应该可以执行以下操作:

Items.Add(new KeyValuePair<string, string>(null, "Please choose..."));
foreach (var item in collectionReturnedFromService.OrderBy(i => i.Value))
{
    Items.Add(item);
}