【问题标题】:Insert new item at top of list view when ListCollectionView.CustomSort set设置 ListCollectionView.CustomSort 时在列表视图顶部插入新项目
【发布时间】:2012-07-10 06:41:19
【问题描述】:

我有一个带有自定义排序器的列表视图(由 ListCollectionView.CustomSort 属性设置),但是我想在列表视图的顶部插入新项目。如何禁止 CustomSort?

我有一个想法来调整我的排序逻辑,所以新添加的项目将是第一个,但是这个解决方案有点臭。

【问题讨论】:

  • 你改变排序逻辑以优先考虑新项目的想法是我现在在另一个项目中使用的解决方案,所以我很想看看人们是否有更好的想法。

标签: wpf sorting


【解决方案1】:

为什么要压制CustomSort?根据您的需要进行调整:

  • 您可以为所有新项目赋予IComparer 对象中用于排序的属性的极值,例如int.MaxValuestring.Empty

  • 或创建一个附加属性 IsNew 并将其包含在比较过程中。

    class MyClass
    {
        public bool IsNew { get; set; }
        public string Name { get; set; }
    }
    
    class MyComparer : IComparer<MyClass>
    {
        public int Compare(MyClass x, MyClass y)
        {
            if (x.IsNew ^ y.IsNew)
            {
                return x.IsNew ? -1 : 1;
            }
            else
            {
                return StringComparer.InvariantCulture.Compare(x.Name, y.Name);
            }
        }
    }
    

【讨论】:

  • 谢谢。我创建了新的 IComperer,它支持我在插入期间使用的新创建的项目(它考虑对象的引用而不是 IsNew)。在您的示例中,您假设对象 x 始终是新创建的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多