- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑在我正在处理的 UI 项目 (Silverlight/MVVM) 上使用事件聚合器模式来支持 View / View 模型之间的松散耦合。我们已经使用一个简单的事件系统编写了几个屏幕——此时它只不过是一个概念证明,但它看起来确实是创建松散耦合系统的一个非常优雅的解决方案。
我遇到的问题是在尚未实例化接收 ViewModel 时将数据从一个 ViewModel 传递到另一个 ViewModel。例如,如果客户列表屏幕打开,用户可能会单击特定客户以打开编辑/查看客户详细信息屏幕(可能在子窗口中)。客户详细信息屏幕需要客户(或客户 ID)才能运行。
OpenCustomerDetailEvent 包含相关客户信息似乎是合理的,但是将这些信息注入(inject)客户详细信息 V/VM 的选项有哪些?由于当事件被处理时它还不在内存中,它不能直接监听事件(它本身不能是处理程序)。我们正在使用依赖注入(inject)容器来创建 View 和 View 模型(我们目前做的是“先查看”),因此让单独的处理程序通过构造函数注入(inject)数据并不是一个好的选择。
在构建 View (模型)后,还有哪些其他选项可以将数据导入 View (模型)?采用强类型参数的 init 方法?使用 setter 注入(inject)数据?让处理程序创建 V/VM,然后分派(dispatch) VM 监听的第二个事件?
最佳答案
为此,我使用了 Prism我的 silverlight 应用程序中的框架。它提供了 EventAggregator 模式的实现和 View 导航基础结构。
在 prism 的情况下,您将使用 NavigationParameters,它为 View / View 模型提供要使用和初始化哪些数据的信息。如果尚未创建 View / View 模型,则 EventAggregator 模式无用,因为它尚未注册到事件。
如果你想依赖自己的框架,我会看看棱镜框架如何view navigation在那里实现,并为您自己的框架挑选一些部分。
我个人鼓励您使用棱镜框架。
关于c# - 事件聚合器模式 : How To Pass Data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092866/
我是一名优秀的程序员,十分优秀!