Jos*_*h G 11
有很多方法可以做到这一点.
将对主/父视图模型的引用传递给子项,并让子项调用主视图模型.
让子视图模型触发父订阅的事件.
使用messenger/mediator在两者之间进行通信.父订阅,孩子发布消息.这提供松耦合.
将主视图模型设置为全局服务.以某种方式注册它.让孩子查找服务(需要全局服务是一个非常常见的问题),然后在全局/公共接口上调用一些东西.
根据我的经验,最简单的方法是#2.在子视图模型上定义事件.父母将不得不查找孩子(我不知道它是否包含它或者你的视图模型是如何构建的)并订阅该事件.
ViewModels之间通信的标准方法是使用某种类型的消息.一个很好的实现是MVVM Light Toolkit
这是使用默认信使的一些(随机)代码:
//Registering:
Messenger.Default.Register<IEnumerable<BookViewModel>>(this, true, fillSourceWith);
Messenger.Default.Register<DisplayModeEnum>(this, ChangeMainTemplates);
//with a specific "token"
Messenger.Default.Register<object>(this, MessageTokens.ClearList, o => BookSource.Clear());
//Sending
Messenger.Default.Send<List<BookViewModel>>(newBooks);
Messenger.Default.Send<DisplayModeEnum>(DisplayModeEnum.MediumLayout);
Messenger.Default.Send<object>(null, MessageTokens.ClearList);
Run Code Online (Sandbox Code Playgroud)