2013-02-19 31 views
2

在.NET中,你可以使用類似篩選和排序一個ObservableCollection的ListView控件,結合

ICollectionView collectionView = CollectionViewSource.GetDefaultView(AllImages); 

要建立過濾機制,UI元素科技早期版本。但是這似乎不再存在於WinRT中。

我正在使用ListBox-Element來顯示用戶列表。 User-Class包含屬性username(String),isOnline(Boolean),isFriend(Boolean)和unreadMails(Int)。我需要某種過濾和排序。

篩選:

  • 沒有過濾
  • 只有isOnline ==真

排序:

  • unreadMails> 0
  • unreadMails == 0
    • 和isOnline ==真
      • 和isFriend ==真
      • isFriend ==假
    • 和isOnline ==假
      • 和isFriend ==真
      • 和isFriend ==假

屬性可能會在運行時發生變化,如果列表自動更新,它會很酷。 (綁定已經工作,只有過濾器和訂單丟失)。

任何想法如何實現這一目標?

+0

在[http://msdn.microsoft.com/en-us/library/ff407126.aspx](http://msdn.microsoft.com/en-us/library/ff407126.aspx) – 2013-02-19 12:05:42

+0

可悲的是,CollectionViewSource-Class中沒有GetDefaultView-Function ... – max06 2013-02-19 12:10:57

+0

以下是WinRT的CollectionView實現:http://www.codeproject.com/Articles/527686/A-WinRT-CollectionView-class-with-Filtering -and-So – 2013-02-26 06:34:58

回答

2

正如你所想的那樣,CollectionViewSource不支持WinRT/XAML中的過濾器或排序。然後,您的解決方案將對關聯的ObservableCollection的內容進行排序。

+0

通過多個參數輕鬆排序Collection的任何快速創意?目前,我正在使用'ObservableCollection _sort = new ObservableCollection (this.OrderBy(User => User.Nickname));'創建一個臨時集合。之後,我將每個元素與原始列表進行比較,並將這些項目移動到正確的新位置。 (需要用於UX轉換)。但是這只是一個排序參數... – max06 2013-02-20 11:28:11

+0

您可以在第一列使用'OrderBy',在下面使用'ThenBy'。請參閱http://stackoverflow.com/questions/298725/multiple-order-by-in-linq。 – 2013-02-20 15:33:22

+0

我現在使用查詢表達式。 5個不同的表達式用於分割整個列表,然後將所有5個對象附加到新的集合中。至少,將原始順序排序爲臨時收集的確切順序 - >完美! – max06 2013-02-20 16:07:46