我正在考虑在我正在处理的 UI 项目(Silverlight/MVVM)上利用事件聚合器模式来支持视图/视图模型之间的松散耦合。我们已经使用一个简单的事件系统编写了一些屏幕——在这一点上它只是一个概念证明,但它看起来确实是创建松散耦合系统的一个非常优雅的解决方案。
我遇到的问题是当接收 ViewModel 尚未实例化时,将数据从一个 ViewModel 传递到另一个 ViewModel。例如,如果客户列表屏幕打开,用户可能会单击特定客户以打开编辑/查看客户详细信息屏幕(可能在子窗口中)。客户详细信息屏幕需要客户(或客户 ID)才能运行。
因此,OpenCustomerDetailEvent 包含相关的客户信息似乎是合理的,但是有哪些选项可以将该信息注入到 Customer Detail V/VM 中?由于处理事件时它还没有在内存中,所以它不能直接监听事件(它本身不能是处理程序)。我们使用依赖注入容器来创建视图和视图模型(我们目前使用“视图优先”),因此让单独的处理程序通过构造函数注入数据不是一个好的选择。
构建数据后,还有哪些其他选项可以将数据放入视图(模型)?采用强类型参数的 init 方法?使用setter注入数据?让处理程序创建 V/VM,然后分派 VM 侦听的第二个事件?