3

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

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

谢谢

4

2 回答 2

3

您所追求的是类似于事件聚合器模式的东西。它将使用一个中央“聚合器”对象和订阅/引发事件(带有有效负载)来来回传送数据。是的,有点复杂。如果您的场景对此足够复杂,这里有一些来自之前 SO 帖子的更多信息

但是......如果您的场景不那么复杂,您可以在视图模型 A 中维护对视图模型 B 的引用,反之亦然。这似乎是您对 ViewModelLocator 所做的事情(它实际上在幕后使用 DI 来解析您所追求的 ViewModel 实例)。这不违反 MVVM 模式。如果在数据共享过程中您订阅了跨视图模型的任何事件(与事件聚合器解决方案相同),您只需要确保自己进行清理。

于 2013-10-30T02:39:56.873 回答
0

如果您在服务定位器或 IoC 容器中注册您的视图模型,您可以简单地从那里获取引用。

SimpleIoc.Default.GetInstance<MyViewModel>()

上面的例子使用了 MvvmLight

于 2013-10-30T07:46:33.923 回答