MVVM和Windows Phone集线器控件

本文关键字:集线器 控件 Phone Windows MVVM | 更新日期: 2023-09-27 18:19:28

我最近在这里问了一些关于MMVM的问题,并感谢您的回复。我还有一个关于同一基础数据源的过滤视图的问题,以及它应该如何工作。

假设我有一个简单的"项目"列表,并希望显示它的各种过滤视图,所有这些都在一个Hub控件中。每个视图都将由一个单独的HubSection公开。所以,我可能有一个显示所有项目的HubSection,另一个显示今天到期的项目,还有一个显示本周的项目,以及本月的最后一个项目。

全部的今天.本周.本月

我的计划是将每个HubSection绑定到视图模型的一个单独属性(让我们保持简单,并假设已经设置了集线器的数据上下文,并且每个HubSection都绑定到该数据上下文的一个属性)。因此,ObservableCollection类型的属性调用了GetAlltems()、GetTodaysItems(。

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

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

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

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

我甚至还没有对集合以及通知的工作方式进行更改:)

谢谢。

MVVM和Windows Phone集线器控件

看看CollectionViewSource,它允许使用相同的对象集,但定义过滤器。我不得不说,winrtwp8.1的实现发生了一些变化。因此,请仔细查看有关如何实际设置过滤器的文档。我认为现在的方法是使用简单的Linq查询

MSDN文档

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

来自一些较旧的来源(用于wp8 SL)

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