【发布时间】: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