Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xaml 在Windows8中过滤GridView_Xaml_Windows 8_Winrt Xaml - Fatal编程技术网

Xaml 在Windows8中过滤GridView

Xaml 在Windows8中过滤GridView,xaml,windows-8,winrt-xaml,Xaml,Windows 8,Winrt Xaml,我目前有一个GridView,其中ItemsSource设置为ObservableCollection。对底层数据的更新会反映在UI中,而无需我的任何努力。事情进展顺利 将过滤器应用于ObservableCollection以便只显示某些项目的最干净的方法是什么?理想情况下,我不想从ObservaleCollection中实际删除项目,也不想维护两个不同的集合,因为这将使保持同步更具挑战性。CollectionViewSource看起来很有希望,但Windows应用商店应用程序实现似乎缺少过滤功

我目前有一个GridView,其中ItemsSource设置为ObservableCollection。对底层数据的更新会反映在UI中,而无需我的任何努力。事情进展顺利


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

如果您使用的是某种MVVM模板,则使用LINQ:

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
                                     };
this.DefaultViewModel[“Children”]=来自OriginallList中的查询

where query.age我刚刚在自己的C#+XAML Windows 8应用程序中处理完同样的问题。这三个开源项目中的任何一个都将为您提供您想要的功能:、和

CollectionViewSource在Windows 8中不包含过滤功能也是不错的,因为最好还是将这些功能放在视图模型中。这样做的主要优点是,打包为可移植类库(PCL),视图模型(包括过滤)将可移植到WPF、Silverlight和Windows8项目中

尽管上述三个开源项目对我来说很有趣,但我还是在自己的基础上完成了这项任务。我的框架已经支持排序,所以过滤是一种自然的添加。在使用我上个月实现的时,添加它很容易。我还没有上传包含过滤的MVVM框架的最新版本。如果以上三个开源项目都不适合您,请告诉我,这样我就可以更快地上传。

您可以使用我的库。例如,如果您希望按特定类型订单过滤bing到GridView:

GridView.ItemsSource=OrdersObservableCollection
.Filtering(o=>o.Type==OrdersFilter.SelectedType)
现在,当OrdersObservableCollection更改或Order.Type属性更改时,GridView会自动刷新。确保Order类实现INotifyPropertyChanged