我的WPF应用中有两个视图和两个ViewModel。我正在使用MVVM ViewModelLocator
在我的ViewModel之间来回传输数据。这是推荐的做法吗?有没有更好的方法来实现这一目标?我目前正在使用此代码访问ViewModel1中的ViewModel2属性
var _viewmodel2 = (Application.Current.Resources["Locator"] as ViewModelLocator).ViewModel2;
由于
答案 0 :(得分:3)
您所追求的是类似Event Aggregator模式的东西。它将使用一个中央“聚合器”对象和订阅/引发事件(带有效载荷)来回传送数据。是的,有点复杂。如果您的方案足够复杂,可以从以前的SO帖子here
获取更多信息然而......如果你的场景不那么复杂,你可以在viewmodel A中维护一个viewmodel B,反之亦然。这看起来就像你在使用ViewModelLocator(它实际上在幕后使用DI来解析你所追求的ViewModel的实例)。这不违反MVVM模式。如果您在数据共享过程中订阅了整个视图模型中的任何事件(事件聚合器解决方案的情况相同),您只需要确保自行清理。
答案 1 :(得分:0)
如果您在服务定位器或IoC容器中注册视图模型,则只需从那里获取参考。
SimpleIoc.Default.GetInstance<MyViewModel>()
以上示例使用MvvmLight