C# 带有指挥器和事件聚合器的分层导航

C# 带有指挥器和事件聚合器的分层导航,c#,wpf,mvvm,caliburn.micro,eventaggregator,C#,Wpf,Mvvm,Caliburn.micro,Eventaggregator,这是我的应用程序架构。请注意,我将导体作为另一个导体的孩子。我有IHandle让每个指挥接收来自其子指挥的消息。消息类型与我仅用于导航的消息相同。我的问题是我将ShellView的EventAggregator传递给它的孩子们 NewConnectionView的事件聚合器怎么样?因为我使用它的EventAggregator在ShellView上导航。它的孩子可以在它的ActiveItem上导航 如何在一个ViewModel中分离这两个EventAggregator ShellView&NewC

这是我的应用程序架构。请注意,我将导体作为另一个导体的孩子。我有IHandle让每个指挥接收来自其子指挥的消息。消息类型与我仅用于导航的消息相同。我的问题是我将ShellView的EventAggregator传递给它的孩子们

NewConnectionView的事件聚合器怎么样?因为我使用它的EventAggregator在ShellView上导航。它的孩子可以在它的ActiveItem上导航

如何在一个ViewModel中分离这两个EventAggregator

ShellView&NewConnectionView==>Conductor.Collection.OneActive

                                         +----------------------------------+
                                         | ShellView                 |_|[]|x|
                                         +----------------------------------+
                                         | +------------------------------+ |
                                         | |                              | |
                                         | |                              | |
                                         | |                              | |
                                         | |         ActiveItem           | |
                                         | |                              | |
                                         | |                              | |
                                         | |                              | |
                                         | +------------------------------+ |
                                         +----------------------------------+
                                                     /       \
                                                    /         \
                                                   /           \
                                                  /             \
                                                 /               \
                                                /                 \
                                               /                   \
                     +----------------------------------+    +----------------------------------+
                     | NewConnectionView         |_|[]|x|    | ConnectionListView        |_|[]|x|
                     +----------------------------------+    +----------------------------------+
                     | +------------------------------+ |    | TextBlock                        |
                     | | ComboBox                 | V | |    | +----------------------+ +-----+ |
                     | +------------------------------+ |    | |                      | | Btn | |
                     | +------------------------------+ |    | |                      | +-----+ |
                     | |                              | |    | |                      | +-----+ |
                     | |                              | |    | |                      | | Btn | |
                     | |                              | |    | |    DataGrid          | +-----+ |
                     | |         ActiveItem           | |    | |                      | +-----+ |
                     | |                              | |    | |                      | | Btn | |
                     | |                              | |    | |                      | +-----+ |
                     | |                              | |    | |                      |         |
                     | +------------------------------+ |    | +----------------------+         |
                     +----------------------------------+    +----------------------------------+
                                 /       \
                                /         \
                               /           \
                              /             \
                             /               \
                            /                 \
                           /                   \
 +----------------------------------+    +----------------------------------+
 | FileConnectionView        |_|[]|x|    | DatabaseConnectionView    |_|[]|x|
 +----------------------------------+    +----------------------------------+
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 +----------------------------------+    +----------------------------------+
目前,我的方法是使用NewConnectionShellView(屏幕)作为NewConnectionView的(导体)父对象来分离EventAggregator。但问题是,我无法将NewConnectionView的子项的DisplayName显示在我的主窗口(ShellView)中

请注意,我没有使用MEF。我的问题有解决办法吗

                                         +----------------------------------+
                                         | ShellView                 |_|[]|x|
                                         +----------------------------------+
                                         | +------------------------------+ |
                                         | |                              | |
                                         | |                              | |
                                         | |                              | |
                                         | |         ActiveItem           | |
                                         | |                              | |
                                         | |                              | |
                                         | |                              | |
                                         | +------------------------------+ |
                                         +----------------------------------+
                                                     /       \
                                                    /         \
                                                   /           \
                                                  /             \
                                                 /               \
                                                /                 \
                                               /                   \
                     +----------------------------------+       +----------------------------------+ 
                     | NewConnectionShellView    |_|[]|x|       | ConnectionListView        |_|[]|x| 
                     +----------------------------------+       +----------------------------------+ 
                     | +------------------------------+ |       | TextBlock                        | 
                     | |                              | |       | +----------------------+ +-----+ | 
                     | |                              | |       | |                      | | Btn | | 
                     | |                              | |       | |                      | +-----+ |
                     | |                              | |       | |                      | +-----+ | 
                     | |                              | |       | |                      | | Btn | | 
                     | |                              | |       | |    DataGrid          | +-----+ | 
                     | |         ActiveItem           | |       | |                      | +-----+ | 
                     | |                              | |       | |                      | | Btn | | 
                     | |                              | |       | |                      | +-----+ | 
                     | |                              | |       | |                      |         | 
                     | +------------------------------+ |       | +----------------------+         | 
                     +----------------------------------+       +----------------------------------+ 
                                    |
                                    |
                                    |
                                    |
                                    |
                                    |
                                    |
                                    |
                                    V
                     +----------------------------------+
                     | NewConnectionView         |_|[]|x|
                     +----------------------------------+
                     | +------------------------------+ |
                     | | ComboBox                 | V | |
                     | +------------------------------+ |
                     | +------------------------------+ |
                     | |                              | |
                     | |                              | |
                     | |                              | |
                     | |         ActiveItem           | |
                     | |                              | |
                     | |                              | |
                     | |                              | |
                     | +------------------------------+ |
                     +----------------------------------+
                                 /       \
                                /         \
                               /           \
                              /             \
                             /               \
                            /                 \
                           /                   \
 +----------------------------------+    +----------------------------------+
 | FileConnectionView        |_|[]|x|    | DatabaseConnectionView    |_|[]|x|
 +----------------------------------+    +----------------------------------+
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 |                                  |    |                                  |
 +----------------------------------+    +----------------------------------+

听起来您希望使用事件聚合器的一个实例进行shell/插件通信,每个插件使用一个实例进行视图间模型通信。我建议使用IoC容器并将shell事件聚合器注册为单例,然后使用引用容器的工厂来解析视图模型的实例


您可以有一种更改显示名称并发布在shell view事件聚合器实例上的消息类型,以及一种更改当前活动项并用于所有事件聚合器实例的消息类型。

使用IoC意味着我也使用MEF?或ninject、autofac等。MEF有点不同!NET书籍中的依赖性注入很好地描述了这些差异。是的,没有什么可以阻止您在插件架构中使用MEF,在通用应用程序基础架构中使用另一个IoC容器。