0

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

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

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

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

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

4

1 回答 1

0

创建将由每个视图的 ViewModel 共享的模型。

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

View 2 的 ViewModel 将订阅 Model 的 CurrentEntity 的更改,并将正确更新它自己的 CurrentEntity 属性,这将导致它的 View 更新。

于 2010-03-31T14:02:25.183 回答