我正在研究在我正在使用的UI项目(Silverlight / MVVM)上使用Event Aggregator Pattern来支持views / viewmodel之间的松散耦合。我们使用一个简单的事件系统编写了几个屏幕 - 它不仅仅是一个概念证明,但它似乎是创建一个松耦合系统的一个非常优雅的解决方案。
我遇到的问题是当接收的ViewModel尚未实例化时,将数据从一个ViewModel传递到另一个ViewModel。例如,如果打开了“客户列表”屏幕,则用户可能会单击特定客户以打开编辑/查看“客户详细信息”屏幕(可能在子窗口中)。客户详细信息屏幕需要客户(或客户ID)才能运行。
OpenCustomerDetailEvent包含相关客户信息似乎是合理的,但是有哪些选项可以将这些信息注入客户详细信息V / VM?由于事件处理时它不在内存中,因此无法直接侦听事件(它本身不能成为处理程序)。我们正在使用一个依赖注入容器来创建视图和视图模型(我们目前正在“查看第一个”),因此使用单独的处理程序通过构造函数注入数据不是一个很好的选择。
一旦构建了数据,还有哪些其他选项可以将数据导入View(Model)?一个接受强类型参数的init方法?使用setter注入数据?让处理程序创建V / VM,然后调度VM侦听的第二个事件?
答案 0 :(得分:2)
为此,我在我的silverlight应用程序中使用Prism框架。它提供了EventAggregator模式和视图导航基础结构的实现。
对于prism,您将使用NavigationParameters,它为视图/视图模型提供要使用和初始化的数据的信息。如果尚未创建view / viewmodel,则EventAggregator模式无效,因为它尚未注册到该事件。
如果你想依靠自己的框架,我会看一下prism框架如何在那里实现view navigation并为你自己的框架选择一些部分。
我个人鼓励你使用棱镜框架。