2013-04-20 91 views
2

我写使用MVVM框架手机应用程序。它合在一起没问题 - 手机上的每个页面(视图)都有自己的ViewModel,每个ViewModel中的代码都离开数据服务并检索到适当的数据。如何链接视图和视图模型,并在那里创建它们

所以我不得不表示即将到来的项目的议程页面和视图模型检索到的事件的集合和XAML中我结合一个列表框到这个集合。 同样,我有另一个页面显示OneOff事件,并再次在其虚拟机内调用数据服务以获取数据集合,并将其绑定到其视图中的列表框。

不知道这MVVM的实现有多好,但是,我结束了移动到不同的数据库 - 这是很容易实现不接触任何东西另一个DataService的,这一切伟大的工作。

好了 - 所以现在我期待这个程序返工到Windows商店应用。我现在有一个主页面,可以显示手机上的数据组合在单个页面上显示的组合。 假设,假设上面提到的议程项目和一次性事件现在出现在同一主页上(显示内容有更多的空间)

只是为ViewModel(s)意味着什么。如果MainPage只能使用一个ViewModel,那么最终我会得到一个巨大的ViewModel,它包含了以前多个VM中的所有功能。

还是应该主视图模型有它收藏的ViewModels内。从环视来看,这似乎是它可以完成的方式,但是,如果是的话,ViewModel在哪里创建? 从我以前的工作看来,这似乎是一个根本性的转变。

回答

1

是的,你可以设置不同的ViewModels为您网页的不同部分结合上下文。您可以使用定位器模式(一个具有ViewModel属性的定位器对象)或依赖注入来保持事物的可管理性。

Gill Cleeren介绍并展示如何使用MVVM和ViewModelLocator类可以设置Contoso Cookbook sample application的很好的示例代码和幻灯片,可以找到here。谈话本身在channel 9

从这些幻灯片:

数据绑定是胶水,但...

需要,以“发现”它的视图模型

  • 视图模型是DataContext的

可以是静态或动态的

  • 静态:查看创建视图模型,并将其设置的DataContext
  • 动态:在运行时,View选择其ViewModel或反之亦然

    2个选择:

    • 视图 - 第一:视图模型被创建,因为创建视图
    • 视图模型,第一:视图模型创建和查看被选中