0

我有以下情况:我得到一个应该按SortId属性排序的项目列表。

我已经IComparable<T>在我的 ItemViewModels 中实现了接口,这样我就可以Comparer.Default在我的ICollectionView.CustomSort属性中使用来应用排序而不使用反射(PropertySortDescription确实如此)。

现在,我的问题是这些项目有时没有SortId设置属性,因为它们应该简单地按照它们在集合中出现的顺序进行排序。但是,项目不是保持顺序,而是以相反的顺序显示,有时甚至完全混合 - 这似乎取决于项目的数量。

有没有办法避免这种行为?如果我不应用任何排序,则项目以正确的顺序出现。但是,我必须根据项目的SortId属性动态打开或关闭排序 - 我根本不喜欢......还有其他想法吗?

4

1 回答 1

1

通过更新CompareTo方法的实现,您可以保证那些没有定义 SortId 的对象的排序顺序

例如

    public class MyItem : IComparable
    {
        public int? SortId { get; set; }

        public int CompareTo(object other)
        {
            if (SortId == null)
                return -1;

            MyItem otherItem = other as MyItem;
            if (otherItem == null || otherItem.SortId == null)
                return 1;

            return SortId.Value.CompareTo(otherItem.SortId.Value);
        }
    }

以上将保证没有排序ID的对象将小于其他对象

于 2014-06-24T07:31:08.900 回答