在两个ViewModel之间传输数据

时间:2013-10-30 02:05:50

标签: wpf mvvm

我的WPF应用中有两个视图和两个ViewModel。我正在使用MVVM ViewModelLocator在我的ViewModel之间来回传输数据。这是推荐的做法吗?有没有更好的方法来实现这一目标?我目前正在使用此代码访问ViewModel1中的ViewModel2属性

var _viewmodel2 = (Application.Current.Resources["Locator"] as ViewModelLocator).ViewModel2;

由于

2 个答案:

答案 0 :(得分:3)

您所追求的是类似Event Aggregator模式的东西。它将使用一个中央“聚合器”对象和订阅/引发事件(带有效载荷)来回传送数据。是的,有点复杂。如果您的方案足够复杂,可以从以前的SO帖子here

获取更多信息

然而......如果你的场景不那么复杂,你可以在viewmodel A中维护一个viewmodel B,反之亦然。这看起来就像你在使用ViewModelLocator(它实际上在幕后使用DI来解析你所追求的ViewModel的实例)。这不违反MVVM模式。如果您在数据共享过程中订阅了整个视图模型中的任何事件(事件聚合器解决方案的情况相同),您只需要确保自行清理。

答案 1 :(得分:0)

如果您在服务定位器或IoC容器中注册视图模型,则只需从那里获取参考。

SimpleIoc.Default.GetInstance<MyViewModel>()

以上示例使用MvvmLight