MVVM和Windows Phone Hub Control

时间:2014-08-27 03:52:22

标签: c# sqlite windows-phone-8 mvvm

我最近在这里询问了一些关于MMVM的问题,并对这些回复表示赞赏。我还有一个问题是关于相同底层数据源的过滤视图以及它应该如何工作。

我们说我有一个简单的"项目列表"并希望在Hub控件中显示此的各种过滤视图。每个视图都将由一个单独的HubSection公开。所以,我可能有一个显示所有项目的HubSection,另一个显示今天到期的项目,另一个显示本周的项目和本月的最终项目。

。所有 。今天 。本星期 。本月

我的计划是将每个HubSection绑定到viewmodel的单独属性(让我们保持这个简单,并假设设置了hub的datacontext,并且每个HubSection绑定到该datacontext的属性)。因此,ObservableCollection类型的属性称为GetAlltems(),GetTodaysItems(),GetThisWeeksItems()和GetThisMonthsItems()。

我的问题是关于如何以及何时从模型中获取数据。一个选项是在创建视图模型时声明并填充四个ObservableCollection属性(在它的构造函数中?)。似乎问题在于我在内存中有四个基本相同的数据副本(只是应用了不同的过滤器),以及数据存储本身中的相同数据(在我的情况下是SQLite)。

另一种选择是在创建viewmodel时不填充这些属性,而只是绑定到获取相应过滤数据集的属性,并将其作为ObservableCollection动态返回。但是当用户在HubSections上滑动时,我不确定会有什么样的性能。如果HubSection是"屏外" (比如说第四个HubSection,而第一个是在屏幕上),是那个时候填充的绑定列表控件还是仅在它进入视图时才会发生?

每个过滤视图的数据集很小("所有"集合可能是几百,最大)。但是在移动设备上,似乎没有必要预先填充这四个属性。

无论如何,这似乎是一个合理的共同要求(多个HubSection控件,每个控件都绑定到同一个底层数据源的过滤集)。因此,对最优雅的方式感兴趣,同时具有合理的性能和内存使用。

我还没有对收藏品进行更改以及通知如何工作:)

感谢。

1 个答案:

答案 0 :(得分:0)

看看CollectionViewSource它允许使用同一组对象但定义过滤器。 我不得不说实现在winrt wp8.1上有所改变。因此请仔细检查有关如何实际设置过滤器的文档。我认为现在的方法是使用简单的Linq查询

MSDN doc

http://msdn.microsoft.com/library/windows/apps/br209833

来自一些较老的来源(对于wp8 SL)

http://www.hanselman.com/blog/CollectionViewSourceIsCrazyUsefulForBindingToFilteredObservableCollectionsOnWindowsPhone8.aspx http://www.spikie.be/blog/post/2012/04/12/Filtering-collections-from-XAML-using-CollectionViewSource.aspx