具有持久订户行为的WPF/SL EventAggregator实现?

具有持久订户行为的WPF/SL EventAggregator实现?,wpf,silverlight,prism,eventaggregator,Wpf,Silverlight,Prism,Eventaggregator,目前,我正在使用最新的Prism for Silverlight 4构建一个应用程序。 我有一个模块,在这个模块中我有两个视图和视图模型。我还有一个模块视图,每个视图有两个区域。 在模块初始化中,我将在Unity容器中注册视图和视图模型,并将视图注册到相应的区域。 问题是视图应该显示类似于表详细信息的内容-第一个视图显示可用的实体,第二个视图显示选定实体的详细信息 我需要一种方法,如何通过他们最初选择的实体。新创建的第一个视图没有任何选定实体,新创建的第二个视图不显示任何详细信息 目前我是这样做

目前,我正在使用最新的Prism for Silverlight 4构建一个应用程序。 我有一个模块,在这个模块中我有两个视图和视图模型。我还有一个模块视图,每个视图有两个区域。 在模块初始化中,我将在Unity容器中注册视图和视图模型,并将视图注册到相应的区域。 问题是视图应该显示类似于表详细信息的内容-第一个视图显示可用的实体,第二个视图显示选定实体的详细信息

我需要一种方法,如何通过他们最初选择的实体。新创建的第一个视图没有任何选定实体,新创建的第二个视图不显示任何详细信息

目前我是这样做的: 在模块中,我创建了两个视图模型,并将它们注册为Unity容器中的实例,然后将视图注册为相应区域的类型。每个视图都订阅EventAggregator中的EntitySelectedEvent。模块初始值设定项在初始化后发布此事件,这样两个视图将选择相同的实体

我知道这看起来很难看-我尝试从一个视图模型发布此事件,但问题是Prism中的EventAggregator不支持持久订阅者-这意味着,如果第二个视图模型在第一个视图模型触发事件之前未订阅事件,它将不会接收和处理事件。我知道这是EventAggregator的正常行为,但我正在寻找一种解决方案,即视图模型可以触发事件而不依赖于它们的初始化顺序-即第一个模型可以在创建第二个模型之前触发事件,第二个模型在订阅后将接收此“排队”事件


是否有其他WPF/SL消息传递实现支持这种行为,或者使用中介(在我的示例中,它是一个模块本身)毕竟不是一个坏主意?mediator的一个大问题是必须立即在initialize中创建模型,并且不能在容器中注册为类型,因为这会再次导致缺少订阅服务器。

创建一个模型,该模型将由每个视图的ViewModels共享

在视图1中选择行时,其ViewModel(通过绑定到选定行的CurrentEntity属性)将更新模型


视图2的ViewModel将订阅模型的CurrentEntity的更改,并将正确更新其自身的CurrentEntity属性,从而导致其视图更新

谢谢,好消息。但我不想让视图相关逻辑泄漏到我的模型中(在我的例子中,选择是与视图相关的)。我不想一直在视图模型中选择逻辑并依赖于基于事件的消息传递(至少这是我找到的唯一解决方案)-问题是,要在视图模型之间链接视图模型,如果其中一个视图模型发布事件,我需要按特殊顺序创建它们,或者使用中介,在知道创建了视图模型后触发事件(我的中介模块正是这样做的)。嗯,我认为Prism中的事件应该用于模块间通信。例如,模块a中的vm对模块B中的vm-s一无所知,也不关心,所以它触发了一个事件,这可能是somone感兴趣的。但是,如果两个vm-s都位于同一个模块中,特别是如果它们的功能如此明显地耦合,那么为什么要使用PRM阻止它们相互了解?父vm可以直接注入子vm。使用事件不是只会引入不必要的复杂性吗?也许你是对的-它们确实在一个模块内,一个视图模块控制另一个。我会考虑你的建议。