2010-08-11 52 views
1

我有一个绑定到集合的列表框。我希望列表框始终颠倒项目的顺序。这个处理程序 - 连接到控件的加载事件 - 用于初始加载,但以后不加载。我曾尝试使用SourceUpdated事件,但似乎没有工作。如何保持数据绑定列表逆向排序

我该如何保持恒定的主动排序?

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

回答

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>和排序顺序将保持不变。

+0

我认为我们在esri控件中有一个bug。图层集合是一个ObservableCollection,但它没有正确实现INotifyCollectionChanged – Douglas 2010-08-12 13:49:41

+0

我想你可以尝试用一个香草ObservableCollection替换你的控件,看看问题是否消失。如果是这样,那么看起来你的esri控制可能有问题。 – 2010-08-12 15:19:40

0

如果你的源集合是List<T>或没有实现INotifyCollectionChanged一些其他的收藏,有没有办法时,将产品添加WPF可以检测。您需要使用实现INotifyCollectionChanged的集合,如ObservableCollection<T>

另外,你的集合中的项目需要实现INotifyCollectionChanged,以便对项目的变化考虑在内