Silverlight - 在视图模型之间进行通信

时间:2012-06-26 17:33:06

标签: silverlight mvvm mvvm-light

此UI由Main.xaml组成,其中包含一个保存(Person.xaml)的导航框架,因此涉及两个不同的视图模型。

enter image description here

我想在点击Main.xaml中的菜单时过滤数据网格的内容。

  • 人(全部显示)
  • 得分高于50
  • 得分低于50

我的方法是通过让PersonViewModel订阅从MainViewModel发送的特定消息来使用MVVM light Messaging。这可行,但有没有其他方法(最佳实践)?

如果有更好的方法可以解决这个问题,我讨厌为所有场景实现MvvmLight Messaging,其中来自不同视图模型的UI元素需要进行通信。

3 个答案:

答案 0 :(得分:2)

如果您正在使用MVVM灯,我想您已经在ViewModelLocator中创建了这些视图模型。因此,只需使用它来访问应用程序中的视图模型即可。

另一种方法是使用某种类型的IoC容器,如Unity或SimpleIoC。

我希望这会对你有所帮助。

答案 1 :(得分:1)

我们也使用MVVM灯。从我对你的要求的理解。你可以只使用一个DomainContext,然后将所有实体加载到它,然后查询每个点击项的上下文。

一旦有了Context,你基本上可以动态查询它。这是我的一个代码中的内容。

 GetUserBUGroups = SecurityDomainContext.Current.UserBUGroups.Where(ub => ub.UserID == GetUsers.UserID).OrderBy(o => o.BUGroup.BUGroupDesc).ToList();

答案 2 :(得分:0)

对于诸如此类的简单场景,使用多个ViewModel似乎不合适。 我相信你应该直接在PersonViewModel中插入过滤器选项