2010-08-11 30 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,以便對項目的變化考慮在內