EventAggregator模式:如何传递数据

本文关键字:何传递 数据 模式 EventAggregator | 更新日期: 2023-09-27 17:57:36

我正在考虑在我正在处理的UI项目(Silverlight/MVM)上使用事件聚合器模式来支持视图/视图模型之间的松散耦合。我们已经使用一个简单的事件系统编写了一些屏幕——在这一点上,它只不过是一个概念验证,但对于创建一个松散耦合的系统来说,它似乎是一个非常优雅的解决方案。

我遇到的问题是,当接收的ViewModel还没有实例化时,将数据从一个ViewModel传递到另一个。例如,如果打开了"客户列表"屏幕,用户可能会单击特定客户以打开编辑/查看"客户详细信息"屏幕(可能在子窗口中)。"客户详细信息"屏幕需要一个客户(或客户Id)才能正常工作。

因此,OpenCustomerDetailEvent将包含相关的客户信息似乎是合理的,但将这些信息注入客户详细信息V/VM的一些选项是什么?由于在处理事件时它还不在内存中,因此它不能直接侦听事件(它本身不能是处理程序)。我们使用depenency注入容器来创建视图和视图模型(我们目前是"视图优先"),因此让一个单独的处理程序通过构造函数注入数据不是一个好的选择。

在构建视图(模型)后,还有哪些其他选项可用于将数据导入视图?一个接受强类型参数的init方法?使用setter注入数据?让处理程序创建V/VM,然后分派VM侦听的第二个事件?

EventAggregator模式:如何传递数据

为此,我在silverlight应用程序中使用Prism Framework。它提供了EventAggregator模式的实现和视图导航基础设施。

在棱镜的情况下,您将使用NavigationParameters,它为视图/视图模型提供要使用和初始化的数据的信息。如果视图/视图模型尚未创建,则EventAggregator模式是无用的,因为它尚未注册到事件中。

如果你想依赖自己的框架,我会看看棱镜框架是如何实现视图导航的,并为你自己的框架挑选一些部分。

就我个人而言,我鼓励你使用棱镜框架。