我正在尝试使用扩展方法对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
}
有人可以给我一些帮助吗?
答案 0 :(得分:0)
我正在使用以下代码对集合进行排序:
ConceptItems = new ObservableCollection<DataConcept>(ConceptItems.OrderBy(i => i.DateColumn));
简单易用