排序ObservableCollection

14

假设我有员工类的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”)进行排序[它将是....按FirstName排序....按MobileNumber排序等]。

并且需要返回已排序的ObservableCollection。这意味着它不能以“var”的形式存在,而应该是ObservableCollection<Employee>

因此,我可以将其重新分配给“ItemsControl”“ItemsSource”属性......

谢谢......


2
你为什么想要对集合进行排序?你也可以在数据绑定上执行排序。 - PVitt
在我的应用程序中,“项目控制”显示可观察集合中的每个员工,现在我想对可观察集合进行排序,以便应用程序的UI将根据已排序的可观察集合进行更改......谢谢。 - Pritesh
4个回答

27

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

// 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}}"

1
请注意,PropertyName 不能使用绑定。它会直接导致以下运行时错误:无法在类型为 'SortDescription' 的 'PropertyName' 属性上设置 'Binding'。'Binding' 只能在 DependencyObject 的 DependencyProperty 上设置。 - Ondrej Janacek
@OndrejJanacek 这是新的行为吗?我敢肯定我以前就是这样使用的。但是我现在无法访问代码来检查它。 - PVitt
嗯,你使用它的方式并不太可能。毕竟该属性被称为“PropertyName”,这表明它可以接受一个属性的字符串名称,而不是直接绑定到它。但我对WPF还很陌生,我只是因为在寻找解决方案时偶然发现了它,所以也许以前它可以用其他方式工作。 - Ondrej Janacek
我该如何按降序排列? - devjme
很棒,谢谢!!! - devjme
显示剩余2条评论

3

1
一个排序的可观察集合的替代实现:ObservableSortedList<T> - Roman Starkov
Codeplex链接失效了。 - sa.he

2

1

你不需要自己排序,而是可以让 WPF 为你完成。可以参考 SortDescription


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接