【问题标题】:Prism 6 and constructor callingPrism 6 和构造函数调用
【发布时间】:2015-09-30 20:21:11
【问题描述】:

根据来自 Brian Lagunas (YouTube Link) 的视频,我开始使用 Prism 6。我有点困惑,其中调用了 MainWindowViewModel 的构造函数。我几乎复制了他的项目,但找不到该部分。如果我在构造函数中设置断点,它永远不会到达那里。

他是不是在视频中没有展示什么?

【问题讨论】:

    标签: mvvm constructor youtube prism


    【解决方案1】:

    如果您查看此演示文稿的 code,您会看到 Brian 正在使用 Prism 附加的依赖属性通过 ViewModelLocator 耦合视图和视图模型。

    prism:ViewModelLocator.AutoWireViewModel="True"
    

    在 33:00 左右的视频中,他完整解释了 ViewModelLocator 的工作原理:首先,它通过约定从视图名称构建视图模型名称。然后它通过 IoC 容器或反射将此名称解析为类型。 IoC 非常简单:给出一个类型或名称,它会给你一个实例。对于反射部分(当您在没有容器的情况下运行时),Prism 使用Activator type to create a new instance。

    在 GitHub 上提供的最终代码中,Brian 使用 Unity 作为 IoC 容器。他的子视图(ViewA/ViewB)的自定义映射在引导程序中进行。由于 MainViewModel 没有自定义映射,因此会发生以下过​​程:

    • 应用以 MainWindow 作为启动窗口启动。
    • ViewModelLocator 的附加属性被“触发”,内部逻辑将从 MainWindow 映射到 MainWindowViewModel
    • 当我们使用 Unity 时,ViewModelLocator 会请求视图模型的实例
    • Unity 将创建一个新的 MainWindowViewModel 对象,构造函数将被命中

    所以你不会在代码中看到 new xxxViewModel(),但它确实被创建了。这意味着当涉及到添加依赖项时,您在创建硬编码对象时拥有更大的灵活性。

    【讨论】:

    • 感谢源代码的链接。我的小应用程序现在可以工作了 :) 我更改了 MainWindow 内 viewA 的 ViewModel 现在已链接,而不仅仅是 MainWindow
    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2019-02-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多