3

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

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

因此,OpenCustomerDetailEvent 包含相关的客户信息似乎是合理的,但是有哪些选项可以将该信息注入到 Customer Detail V/VM 中?由于处理事件时它还没有在内存中,所以它不能直接监听事件(它本身不能是处理程序)。我们使用依赖注入容器来创建视图和视图模型(我们目前使用“视图优先”),因此让单独的处理程序通过构造函数注入数据不是一个好的选择。

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

4

1 回答 1

2

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

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

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

我个人会鼓励你使用棱镜框架。

于 2011-05-23T06:52:12.257 回答