MVVM:如何处理嵌套的ViewModel之间的交互?

Dan*_*ant 18 c# architecture mvvm

我一直在试验经常提到的MVVM模式,在某些情况下我很难定义清晰的界限.在我的应用程序中,我有一个对话框,允许我创建到Controller的连接.对话框有一个ViewModel类,这很简单.但是,该对话框还包含一个附加控件(由a选择ContentTemplateSelector),该控件根据所连接的控制器的特定类型而变化.此控件具有自己的ViewModel.

我遇到的问题是,当我按OK键关闭对话框时,我需要实际创建请求的连接,这需要在内部Controller特定的ViewModel类中捕获的信息.简单地让所有特定于Controller的ViewModel类实现构建连接的公共接口是很诱人的,但是内部ViewModel是否应该真正负责这种构造?

我的一般问题是:是否有任何普遍接受的设计模式可用于ViewModel如何与彼此进行交互,特别是当"父"VM需要来自"子"VM的帮助以便知道该怎么做?


编辑:

我确实想出了一个比我原先想的更清洁的设计,但我仍然不确定这是否是'正确'的方法.我有一些后端服务,允许ContentTemplateSelector查看Controller实例并伪魔术地找到要为连接构建器显示的控件.让我烦恼的是,我的顶级ViewModel必须查看DataContext生成的控件并将其转换为适当的界面,这似乎是一个坏主意(为什么View DataContext与创建连接有关? ?)

我结束了这样的事情(简化):

public interface IController
{
    IControllerConnectionBuilder CreateConnectionBuilder();
}

public interface IControllerConnectionBuilder
{
    ControllerConnection BuildConnection();
}
Run Code Online (Sandbox Code Playgroud)

我有我的内部ViewModel类实现IControllerConnectionBuilder,Controller返回内部ViewModel.顶级ViewModel然后可视化IControllerConnectionBuilder(通过伪魔法机制).它仍然困扰我一点,这是我的内部ViewModel执行构建,但至少现在我的顶级ViewModel不必知道脏细节(它甚至不知道或不关心可视化控件正在使用视图模型).

如果有办法进一步清理这个问题,我欢迎提出更多想法.我仍然不清楚ViewModel对于它有多大的责任.

Ber*_*rmo 3

对于视图模型之间的交互效果很好的一个选项是直接绑定到位于视图模型类之间的观察者类。