【问题标题】:how to instantiate a viewmodel using VML SimpleIoc?如何使用 VML SimpleIoc 实例化视图模型?
【发布时间】:2012-06-04 19:59:16
【问题描述】:

所以基本上我需要直接从另一个 viewmodel 实例化一个 viewmodel,我正在使用 MVVMLight,人们说我可以使用 MVVMLight ViewModelLocator 来做到这一点,我在源 ViewModel A 上尝试了这行代码,以实例化目标 ViewModel B

SimpleIoc.Default.GetInstance<BViewModel>();

没用,有什么想法吗?

【问题讨论】:

  • 这应该可以。 GetInstance 返回 BViewModel 的默认实例,如果需要,它会按需实例化。在 BViewModel 构造函数中放置一个断点,我怀疑 IOC 容器尝试实例化它时出现问题。
  • 我的错,它工作得很好,我只是忘记了一个简单的事实,即现在我的虚拟机将加载两次,并且我的构造函数出现错误,因此我从未收到第二次调用(查看调用)并且我一直假设我的这个调用是第二个调用并且第一个调用(VM 调用)从未发生,我修复了构造函数上的错误,现在我有两个调用

标签: silverlight windows-phone-7 mvvm ioc-container mvvm-light


【解决方案1】:

如果我理解正确,您需要在 View B 的构造函数中使用您的代码,如下所示:

this.DataContext = SimpleIoc.Default.GetInstance<BViewModel>();

通过这种方式,您的视图与您的 BViewModel 的实例相结合,在您的示例中,您只是在实例化它。

您可以在此处找到有关构建 ViewModel 和 View 的更多信息:

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx#sec17

但我确实有一些 WP7 编程经验,并建议从您的视图的构造函数中使用您的 IOC 容器。这是因为您传递的参数将使用 WP7 页面的标准导航方法推送到您的视图中。

【讨论】:

  • 感谢您的回复,但要使其正常工作,必须先运行视图 B,而这正是我想要避免的,简单来说,我需要从视图 A 视图模型实例化视图 B 视图模型
  • 在这种情况下,您应该使用 DataTemplate,这正是您想要的。在同一页 3 标题下:msdn.microsoft.com/en-us/library/…
  • 也许是您正在寻找的更好的例子:msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090097
  • 感谢您的努力,但我很早以前就读过 Josh 关于 MVVM 的文章,从那时起我就开始练习 MVVM,我会更具体地编辑问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2019-05-08
  • 1970-01-01
相关资源
最近更新 更多