【问题标题】:How to link the View and the ViewModel and where to create them如何链接 View 和 ViewModel 以及在哪里创建它们
【发布时间】:2013-04-20 23:21:21
【问题描述】:

我使用 MVVM 框架编写了一个手机应用程序。它融合在一起还不错 - 手机上的每个页面(视图)都有自己的 ViewModel,每个 ViewModel 中的代码都转到数据服务并检索适当的数据。

所以我有一个页面显示即将到来的项目的议程,它的 ViewModel 检索了一个事件集合,在 XAML 中我将一个列表框绑定到这个集合。 同样,我有另一个页面显示 OneOff 事件,我再次在其 VM 中调用数据服务以获取数据集合,并将其绑定到其视图中的列表框。

不确定 MVVM 的实现有多好,但是,我最终转移到了不同​​的数据库 - 实现另一个数据服务非常容易,无需触及其他任何东西,而且一切都很好。

好的 - 所以现在我希望将此应用程序重新设计为 Windows 应用商店应用程序。我现在有一个主页,它将显示手机上显示在各个页面上的数据组合。 假设,假设上面提到的议程项目和一次性事件现在出现在同一个主页上(展示内容的空间更大)

只是在纠结这对 ViewModel 意味着什么。如果 MainPage 只能与一个 ViewModel 一起使用,我是否最终会得到一个巨大的 ViewModel,其中包含之前在多个 VM 中的所有功能。

或者主 ViewModel 中是否应该包含 ViewModel 的集合。环顾四周,这似乎是可以完成的方式,但是,如果是这样,ViewModel 是在哪里创建的? 与我之前所做的相比,这似乎是一个根本性的转变。

【问题讨论】:

    标签: xaml mvvm windows-store-apps


    【解决方案1】:

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

    Gill Cleeren 的精彩示例代码和幻灯片讨论并展示了如何使用 MVVM 交替设置 Contoso Cookbook sample application,并且可以在 here 找到 ViewModelLocator 类。谈话本身在channel 9

    从这些幻灯片中:

    数据绑定是粘合剂,但是...

    视图需要“找到”它的 ViewModel

    • ViewModel 是 DataContext

    可以是静态的也可以是动态的

    • 静态:View 创建 ViewModel 并将其设置为 DataContext

    • 动态:在运行时,View 选择它的 ViewModel,反之亦然

      2 个选项:

      • View-First:创建 ViewModel 是因为创建了 View
      • ViewModel-First:创建 ViewModel 并选择 View

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      相关资源
      最近更新 更多