【问题标题】:Sorting ObservableCollection [duplicate]排序 ObservableCollection [重复]
【发布时间】:2011-08-13 19:28:36
【问题描述】:

假设我有员工类的ObservableCollection

public ObservableCollection<Employee> employeeCollection = new ObservableCollection<Employee>();

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public double MobileNumber { get; set; }
    public string City { get; set; }
    public int Age { get; set; }

    public Employee() {}
}

现在我正在尝试对ObservableCollection(“employeeCollection”)进行排序 通过用户从组合框中进行适当的选择[它将是…….按名字排序…….按手机号码等……]..

并且需要取回已排序的可观察集合……。 意味着它不应该是“var”的形式,它应该是 ObservableCollection&lt;Employee&gt;

所以我可以将它分配回“ItemsControl”“ItemsSource” 属性...

谢谢……

【问题讨论】:

  • 为什么要对集合进行排序?您还可以对数据绑定进行排序。
  • [在我的应用程序“Item controle”中显示可观察集合中的每个员工现在我想对可观察集合进行排序,因此我的应用程序的 UI 将根据可观察集合的排序进行更改……谢谢]
  • 如果你能接受答案会很好......

标签: c# .net wpf sorting observablecollection


【解决方案1】:

您可以对集合的视图进行排序,而不是对集合本身进行排序:

// xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
<myView.Resources>
    <CollectionViewSource x:Key="ItemListViewSource" Source="{Binding Itemlist}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="SortingProperty" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</myView.Resources>

然后你可以使用 CollectionViewSource 作为 ItemSource:

ItemsSource="{Binding Source={StaticResource ItemListViewSource}}"

【讨论】:

  • 请注意PropertyName 不能使用绑定。它直接导致以下运行时错误:A 'Binding' cannot be set on the 'PropertyName' property of type 'SortDescription'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
  • @OndrejJanacek 这是新行为吗?我可以发誓我就是这么用的。但我无法再访问代码来检查它。
  • @嗯,您以这种方式使用它的可能性不大。该属性毕竟称为PropertyName,这表明它可以采用属性的字符串名称,而不是直接绑定到它。但是我是 WPF 的新手,我只是偶然发现了这一点,因为我正在寻找解决方案并实现了它,所以它以前可能以另一种方式工作。
  • @OndrejJanacek 无论如何...感谢您的编辑。
  • 如何降序执行?
【解决方案2】:

我认为 PVitt 可能有最好的解决方案......但是,我确实找到了这个 SortedObservableCollection 类可能有帮助吗?

http://softcollections.codeplex.com/

【讨论】:

【解决方案3】:

我实现了一个ObservableCollectionView,它支持使用 lambda 进行排序和过滤(类似于 LINQ,但是是实时的)和项目跟踪:

https://mytoolkit.codeplex.com/wikipage?title=ObservableCollectionView

【讨论】:

    【解决方案4】:

    您不需要自己进行排序,但可以让 WPF 为您完成。例如,请参阅SortDescription

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2016-10-22
      • 1970-01-01
      相关资源
      最近更新 更多