如何对ObservableCollection进行排序<keyvaluepair <int,string =“”> </keyvaluepair <int,>

时间:2014-12-04 10:18:52

标签: c# .net wpf sorting observablecollection

我在文本框上绑定了一个名为TestList的ObservableCollection<KeyValuePair<int, String>>(),我希望按int对该集合进行排序。我尝试过以下操作,但它没有对集合进行排序:

new ObservableCollection<KeyValuePair<int, string>>(
                 TestList .Where(p => p.Key > 0)
                 .GroupBy(p => p.Key)
                 .Select(grp => grp.First())
                 .OrderBy(p => p.Key)
                 );

如何对集合进行排序? Binding还能运作吗?

编辑(也不起作用):

public ObservableCollection<KeyValuePair<int, String>> TestList
{
    get { return testList; }
    set {
        testList = value;
        NotifyPropertyChanged("TestList");
    }
}

public void Test(int index)
{
    TestList.RemoveAt(index);
    TestList = new ObservableCollection<KeyValuePair<int, string>>(TestList.OrderBy(p => p.Key));
}

和GUI:

<TextBox Grid.Column="0" IsReadOnly="True"
Text="{Binding Path=Value , Mode=OneWay}" />

2 个答案:

答案 0 :(得分:5)

你不必分组。你只需要一个简单的订单。

TestList.OrderBy(p => p.Key)

答案 1 :(得分:1)

由于您的源包含KeyValuePair个对象,您可能会认为密钥已经过重复数据删除。因此,分组没有用处。只需保留OrderBy,也可以保留Where,你应该没问题。

new ObservableCollection<KeyValuePair<int, string>>(
             TestList.Where(p => p.Key > 0)
             .OrderBy(p => p.Key)
             );