我的工作WPF应用程序和使用的模型视图模型的模式。

该应用程序包括两个模块的时刻:

  • 左面浏览一棵树,并选择一个节点
  • 主要小组,以显示所选择的内容树的节点。

我想保持这两个模块分隔,但当我选择一个节点在左面,我需要火事件,主要的小组可以订阅。我没想到夫妇的离开和主要的小组,所以我不想分享情况的视图模型的课程。

最佳的我会喜欢使用三棱镜(WPF合应用指导意见),但是目前,我正在扩展现有应用程序,并不能介绍更多依赖关系。该项目也是。净3.0(不3.5),因此我将不转换棱镜回。净3.0因为它是书面的。净3.5.

在棱镜我会解决这种使用的松散耦合的事件基础设施。它可以让你火的事件中任何类别中的任何一层,并聆听任何事件的任何类别中的任何层。基本出版商和用户的事件是去耦合。

我用命令来实现这之间的松散耦合我和我的视图模型,但是我不知道该如何做到适当的截查通信。

任何建议或建议是极大的赞赏。

我具体地寻找一个 真的 光重pub/子事件模型。网2.0/3.0(没有皇宫的东西),或者一些东西,以实现跨视(模块)的通信,而不联接的两个模块。

更新:我最终解决这一类似的方式是什么Glen建议。我有一个单独的EventService(我叫它CommandProxy),并通过一个每一个模型,通过建在我的服务定位器(此刻,我使用的一个服务定位,而不是一个IoC-容器)。该CommandProxy公开一组MultiDelegateCommants,这是一个扩展的DelegateCommand在棱镜(复合WPF指导意见).它基本上允许的命令是去耦些树,并支持多个订户。

有帮助吗?

解决方案

你有一个IoC容器?一个简单的方法是创建一个自定义的服务,火灾事件。活动聚集是通用的,但是你可以创建一个特定的服务,不会你想要什么。

例如创建一个EventingService,有一个OnNodeSelected方法。这一方法火NodeSelected事件挂断的服务。该服务,则注册在你的IoC容器使出版商和用户得到它。这样,如果说你的MainPanel需要订阅,然后你MainPanelViewModel会得到注射EventingServiec在它的构造。然后,它将订阅。另一种做法如果使用WPF拉CompositeCommand从复合程序的代码和图书馆有事件服务公CompositeCommand.然后每个订户(视图模型)注册他们的命令的服务。当OnNodeSelected称,CompositeCommand的执行被调用,由此通知所有感兴趣的缔约方。

我们谈论使用自己的服务,这在文件用于复合程序的指导www.microsoft.com/compositewpf 在部分上的松散耦合的活动在通信的主题。(http://msdn.microsoft.com/en-us/library/cc707836.aspx).弗朗西斯*祥还有一个员额这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top