gpt4 book ai didi

c# - 事件聚合器模式 : How To Pass Data?

转载 作者:行者123 更新时间:2023-11-30 17:17:56 24 4
gpt4 key购买 nike

我正在考虑在我正在处理的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com