【问题标题】:Filtering and Sorting of an ObservableCollection in ListView-BindingListView-Binding 中 ObservableCollection 的过滤和排序
【发布时间】:2013-02-19 12:01:07
【问题描述】:

在 .net 的早期版本中,您可以使用类似的东西

ICollectionView collectionView = CollectionViewSource.GetDefaultView(AllImages);

为 UI 元素建立过滤机制。但这在 WinRT 中似乎不存在了。

我正在使用 ListBox-Element 来显示用户列表。 User-Class 包含属性 username (String)、isOnline (Boolean)、isFriend (Boolean) 和 unreadMails (Int)。我需要某种过滤和排序。

过滤方式:

  • 没有过滤器
  • 只有 isOnline == true

订购方式:

  • 未读邮件> 0
  • 未读邮件 == 0
    • AND isOnline == true
      • AND isFriend == true
      • isFriend == 假
    • AND isOnline == false
      • AND isFriend == true
      • AND isFriend == false

运行时属性可能会发生变化,如果列表自动更新会很酷。 (绑定已经在工作,只是缺少过滤器和顺序)。

任何想法如何实现这一目标?

【问题讨论】:

标签: c# xaml windows-runtime windows-store-apps winrt-xaml


【解决方案1】:

如您所见,CollectionViewSource 不支持 WinRT/XAML 中的筛选器或排序。然后,您的解决方案是对关联的 ObservableCollection 的内容进行排序。

【讨论】:

  • 对于通过多个参数轻松排序集合的任何快速想法?目前,我正在使用ObservableCollection<User> _sort = new ObservableCollection<User>(this.OrderBy(User => User.Nickname)); 创建一个临时集合。之后,我将每个元素与原始列表进行比较,并将项目移动到正确的新位置。 (需要 UX 转换)。但这只是一个排序参数...
  • 您可以将OrderBy 用于第一列,ThenBy 用于以下列。见stackoverflow.com/questions/298725/multiple-order-by-in-linq
  • 我现在正在使用查询表达式。 5 个不同的表达式用于拆分整个列表,然后将所有 5 个对象附加到一个新的集合中。至少,按照临时集合的确切顺序对原始集合进行排序 -> 完美!
【解决方案2】:

CodeProject 上有一个自定义的ICollectionView 实现,它添加了排序/过滤功能。这是文章/代码的链接:http://www.codeproject.com/Articles/527686/A-WinRT-CollectionView-class-with-Filtering-and-So

这将恢复 WinRT 版本的ICollectionView 中缺少的一些功能。希望这会帮助像我一样遇到这个问题的人,寻找过滤集合的能力。

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 2011-10-09
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多