如何使数据绑定列表反向排序

时间:2010-08-11 18:49:51

标签: wpf sorting listbox

我有一个绑定到集合的列表框。我希望ListBox始终反转项目的顺序。这个处理程序 - 连接到控件的加载事件 - 适用于初始加载,但不适用于此后。香港专业教育学院尝试使用SourceUpdated事件,但似乎没有用。

如何维持常量活动排序?

    MyList.Items.SortDescriptions.Add(New SortDescription("Content", ListSortDirection.Descending))

2 个答案:

答案 0 :(得分:0)

如果您的源集合是List<T>或其他未实现INotifyCollectionChanged的集合,则WPF无法检测何时添加项目。您需要使用实现INotifyCollectionChanged的集合,例如ObservableCollection<T>

此外,您的收藏中的项目需要实施INotifyCollectionChanged,以便考虑对项目的更改

答案 1 :(得分:0)

如何存储为ListBox提供项目的集合?它应该是支持INotifyCollectionChanged的集合。该框架提供了您可以使用的ObservableCollection<T>

在ViewModel的构造函数中(或集合所在的任何位置),然后获取DefaultView以添加SortDescriptionCollectionView就像集合顶部的一个层,您可以使用它来对项目进行排序,分组,过滤等,而不会实际影响基础数据源。框架为您创建一个默认的框架。要获得对它的引用,可以使用类似于以下内容的代码:

        var collectionView = CollectionViewSource.GetDefaultView(Widgets);
        if(collectionView == null)
            return;

        collectionView.SortDescriptions.Add(new SortDescription("Content", ListSortDirection.Descending));

有了这些,您应该能够将项目添加到ObservableCollection<T>,并且将保留排序顺序。