一些基本问题,但我看到的大多数示例,只包含一个带有一个viewmodel和一个viewmodellocator的视图,所以我的问题是:
答案 0 :(得分:1)
您应该只有一个ViewModel定位器,可以为匹配的视图提供正确的ViewModel。
通常,ViewModelLocator与某种IoC Framwork一起工作,为正确的情况注入正确的ViewModel。 示例:您有一个DisgnTimeViewModel和一个RuntimeViewModel,Locator负责确定要传递哪一个。 另一点是......您可以在UserControl的DataContext属性上轻松地在Xaml中定义ViewModel。这仅适用于ViewModel ctor无参数的情况。当您想要注入服务时,您也可以通过IOC执行此操作,并让ViewModelLocator找出布线和实例...
为了传递对象和参数,我建议在MVVM Toolkit Light中查看EventAggregator或Messenger的概念。消息将被发送出去,并且订阅的每个ViewModel都可以接收消息。 也可以在诸如ID或对象之类的消息中具有有效载荷......
希望这会有所帮助......答案 1 :(得分:0)
您的ViewModelLocator(Locator
)应该拥有您拥有的每个ViewModel的属性。
示例:您有一个ExampleViewModel
ViewModel类
Locator
课程中:ExampleViewModel
应为属性DataContext="{Binding ExampleViewModel, Source={StaticResource Locator}}"
DataContext="{Binding ExampleViewModel, Source={StaticResource Locator}}"
您应该能够绑定到您在Locator
中指定的任何ViewModel以及您想要的多个视图(不是100%确定第二部分)。