ObservableCollection排序方法

时间:2014-06-23 16:11:32

标签: c# sorting observablecollection

我正在尝试使用扩展方法对ObservableCollection进行排序。

我正在使用这篇文章作为参考:https://stackoverflow.com/a/16344936/1357553

这是我的代码:

public static void Sort<T>(this ObservableCollection<T> collection) where T : IComparable<T>
{
    List<T> sorted = collection.OrderBy(x => x).ToList();
    for (int newIndex = 0; newIndex < sorted.Count(); newIndex++)
    {
        int oldIndex = collection.IndexOf(sorted[newIndex]);
        if (oldIndex != newIndex)
            collection.Move(oldIndex, newIndex);
    }
}

所以,当我使用此方法调用时,我得到了一个异常:

ObservableCollection<myDataModel> AllTasks = new ObservableCollection<myDataModel>();
//fill AllTasks 
this.AllTasks.Sort();

例外:

"An item with the same key has already been added."

当我调用Move()方法时发生异常。

有趣的是,当我使用“string”而不是“myDataModel”使用相同的方法时,它可以正常工作。我已经google了一遍,我找不到任何有关此异常的信息。看起来“myDataModel”实现有问题。

编辑:

myDataModel的实现非常普通。

public class myDataModel : IComparer<myDataModel >, IComparable<myDataModel >
{
    //other stuff

    public bool Equals(myDataModel other)
    {
        //equals implementation
    }


    #region IComparer, IComparable
    public int Compare(MainPlanTGanttTaskViewModel t1, MainPlanTGanttTaskViewModel t2)
    {
        return t1.CompareTo(t2);
    }

    public int CompareTo(MainPlanTGanttTaskViewModel other)
    {
        if (this.Start.CompareTo(other.Start) != 0) return this.Start.CompareTo(other.Start);
        else
        {
            return this.SapCode.CompareTo(other.SapCode);
        }
    }
    #endregion

}

有人可以给我一些帮助吗?

1 个答案:

答案 0 :(得分:0)

我正在使用以下代码对集合进行排序:

ConceptItems = new ObservableCollection<DataConcept>(ConceptItems.OrderBy(i => i.DateColumn));

简单易用