在Windows 8中过滤GridView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows 8中过滤GridView相关的知识,希望对你有一定的参考价值。

我目前有一个GridView,其中ItemsSource设置为ObservableCollection。对基础数据的更新反映在用户界面中,而无需我付出任何努力。事情进展顺利。

将过滤器应用于ObservableCollection以便仅显示某些项目的最干净方法是什么?理想情况下,我不想从ObservableCollection中真正删除项目,也不想维护两个不同的集合,因为这会使保持同步变得更具挑战性。 CollectionViewSource看起来很有希望,但是Windows应用商店实现似乎缺乏筛选功能(为什么使用MS ???)。

答案

我刚刚在自己的C#+ XAML Windows 8应用程序中处理了相同的问题。这三个开源项目中的任何一个都将为您提供所需的功能:Bindable LINQObticsContinuous LINQ

同样,CollectionViewSource在Windows 8中不包含过滤功能,因为无论如何最好将这种功能放入视图模型中。这样做的主要优点是,将View模型(包括过滤)打包为可移植类库(PCL),然后可以在WPF,Silverlight和Windows 8项目中移植。

尽管以上三个开源项目对我来说都很有趣,但我还是通过在自己的MVVM framework之上构建来完成此任务的。我的框架已经支持排序,因此过滤是很自然的事情。使用我上个月实现的Reactive API时,添加它很容易。我尚未上载包含过滤功能的MVVM框架的最新版本。让我知道以上三个开源项目中的哪一个都不适合您,所以我可以尽快上载。

另一答案

假设您正在使用LINQ使用模板的某种MVVM:

this.DefaultViewModel["GreaterThan10Items"] = originalList.Where(c => c.SomeProperty > 10)
    .Select(c => new {c.SomeProperty, c.OtherProperty});

或者也许:

this.DefaultViewModel["Children"] = from query in originalList
                                     where query.age <10
                                     select new Person
                                     {
                                      age= query.age,
                                      name = query.Name
                                     };

当然,ItemViewSource必须链接到GreaterThan10Items,并且您的GridView绑定到该ItemViewSource

另一答案

您可以使用我的ObservableComputations库。例如,如果要按特定类型将bing过滤到GridView:

GridView.ItemsSource = OrdersObservableCollection
    .Filtering(o => o.Type == OrdersFilter.SelectedType)

现在,当OrdersObservableCollection更改或Order.Type属性更改时,将自动刷新GridView。确保Oreder类实现INotifyPropertyChanged。

以上是关于在Windows 8中过滤GridView的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8实用窍门系列:20.Windows 8中的GridView使用和DataTemplateSelector

如何从片段中检索gridview中的图像?

片段中gridview的Android文本和图像适配器

片段中的网格视图

GridView的滚动速度在停止时很慢

从后面的代码中过滤 TextBox 的 KeyPress 事件上的 GridView