C# MVVMLight-引用其他ViewModel的ViewModel

C# MVVMLight-引用其他ViewModel的ViewModel,c#,wpf,silverlight,mvvm-light,C#,Wpf,Silverlight,Mvvm Light,嗨 我正在使用MVVMLight,我希望某个特定VM引用另一个VM的属性。目前,我正在使用ViewModelLocator.SomeViewModelStatic来执行此操作。有时,我还想使用另一个viewmodel的方法。还可以使用ViewModelLocator.SomeViewModelStatic来使用其他ViewModels的方法 这是ViewModels之间通信的正确方式吗?有时我会构建一个VM树。例如:我通过向Person嗜好虚拟机添加一个人和一个嗜好虚拟机来创建Person嗜好虚

我正在使用MVVMLight,我希望某个特定VM引用另一个VM的属性。目前,我正在使用ViewModelLocator.SomeViewModelStatic来执行此操作。有时,我还想使用另一个viewmodel的方法。还可以使用ViewModelLocator.SomeViewModelStatic来使用其他ViewModels的方法


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

有时我会构建一个VM树。例如:我通过向Person嗜好虚拟机添加一个人和一个嗜好虚拟机来创建Person嗜好虚拟机。该类将具有跨越其他两个VM的所有命令

我犹豫是否将嗜好虚拟机链接到个人虚拟机(或反向),因为如果没有个人虚拟机(或反向),使用嗜好虚拟机将变得更加困难


类似地,我创建视图:在本例中,我可以为Person和嗜好创建视图,并在构建Person嗜好视图时使用这些视图。

在这种情况下,我将首先向应用程序添加控制反转容器(,甚至(如果您熟悉它))并在所有视图模型中注册(您可以手动执行,或者相同的IoC容器可以在程序集中查找特定的类)和服务。然后我将实现
ViewModelLocator
,以使用IoC的方式创建ViewModels(然后,每个依赖项都将通过依赖项注入来解决,您需要担心的是在IoC中注册所有内容)


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

我想您会想使用这种方法……您有ViewModels与其他ViewModels通信的示例吗?我没有示例,但您可以将一个ViewModel传递给另一个ViewModel。当然,如果您的通信更复杂您可以使用消息(如此处:)或事件聚合器(如Caliburn Micro:)