【问题标题】:MVVM and the Windows Phone Hub ControlMVVM 和 Windows Phone 集线器控件
【发布时间】:2014-08-27 03:52:21
【问题描述】:

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

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

。全部 .今天 .本星期 .本月

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

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

另一种选择是在创建视图模型时不填充这些属性,而只是绑定到获取适当过滤数据集并将其作为 ObservableCollection 即时返回的属性。但我不确定当用户在 HubSection 上滑动时会有什么样的性能。如果 HubSection 处于“屏幕外”(例如第 4 个 HubSection,而第一个 HubSection 在屏幕上),绑定列表控件是在该点填充还是仅在它进入视图时发生?

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

无论如何,这似乎是一个合理的常见要求(多个 HubSection 控件,每个控件都绑定到相同基础数据源的过滤集)。因此,有兴趣以最优雅的方式执行此操作,同时具有合理的性能和内存使用率。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    MSDN 文档

    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

    【讨论】:

    • 感谢您的回复。我会更详细地看一下。这里让我稍微担心的一件事——我很可能弄错了——使用这种方法,我的过滤逻辑最终会出现在视图中,而不是视图过滤器中。我绝对不是“完美” MVVM 的奴隶,但在我采用任何一种方法之前,我至少想确保我理解其中的含义。 CollectionViewSource 的使用在多大程度上“妥协”了 MVVM 原则?注意:就其本身而言,这对我来说并不是一个障碍。只想要大局。再次感谢您。
    • 嗯,我认为大多数人倾向于使用 Linq 方法。因此,通过过滤 1 个集合执行 Linq 查询,并将其作为可绑定属性传递到您的视图模型中。所以一切都在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多