MVVMLight - 引用其他ViewModel的ViewModel

时间:2011-05-19 05:25:57

标签: c# wpf silverlight mvvm-light

HI,

我正在使用MVVMLight,我希望一个特定的VM引用另一个VM的属性。目前,我使用ViewModelLocator.SomeViewModelStatic来做到这一点。有时,我还想使用另一个viewmodel的方法。并且还使用ViewModelLocator.SomeViewModelStatic来使用其他ViewModels方法。

这是ViewModels之间正确的通信方式吗?

2 个答案:

答案 0 :(得分:1)

有时我会建立一个VM树。例如:我通过将Person和Hobbies VM添加到PersonH​​obbies VM来创建PersonH​​obbies VM。该类将包含跨越其他VM的所有命令。

我毫不犹豫地将爱好VM链接到人员VM(或反向),因为在没有人员虚拟机(或反向)的情况下使用爱好虚拟机将变得更加困难。

类似地,我创建了视图:在这个例子中,我可以为Person和Hobbies创建视图,并在构造PersonH​​obbies视图时使用这些视图。

答案 1 :(得分:1)

在这种情况下,我首先将控制容器的反转添加到应用程序(AutofacNinject甚至MEF(如果您熟悉的话)使用它))并在所有 ViewModels 中注册(您可以手动执行,或者相同的IoC容器可以在程序集中查找特定的类)和服务。然后我将实现ViewModelLocator与IoC一起工作,以便ViewModel将由它创建(然后每个依赖项都将通过依赖注入来解决,所有你必须担心的是在IoC中注册所有内容)< / p>

通过使用IoC,您还可以使用工厂方法,可以在ViewModel中为您创建实例。