我想知道使用 Caliburn.Micro 在两个不相关的视图模型之间导航的最传统方法是什么?假设在应用程序的一个部分中有一个视图模型树:ParentViewModel->ChildVM1->ChildVM2 等。此外,还有一个 OmniVM 应该能够导航到上述任何视图模型。通过“导航”,我的意思是找到适当的实例(之后激活部分很简单)。我不想涉及任何 IEventAggregator 的使用,也不想涉及 Container.Resolve 之类的东西。感谢您的回复
1 回答
devdigital 在评论中说过,我要在这里再说一遍,正如 Rob (编写框架的架构师)所说,架构在 UI 中也很重要。这意味着您应该考虑如何组织表示层。换句话说,您是否将拥有一个选项卡式界面,其中主窗口将是 Caliburn.Micro Conductor 并且选项卡进行屏幕,或者您是否将拥有使用停靠窗口和工具栏的 Visual Studio 类型的 UI,请考虑构建 UI 时的这种思维方式。现在,如果您不喜欢架构并且只想设计 GUI,那么我可以告诉您 Screen 和 Conductor 是导航时要考虑的最重要的类。我强烈建议您阅读Screens, Conductors and Compositions文章如果您还没有这样做,它将让您了解我在说什么以及一堆有用的想法。
编辑:对于您的具体情况,并且由于您具有这种深度嵌套的结构,我将创建一个用于导航的界面MenuViewModel
,如下所示:
public interface IMenuNavigator {
void NavigateToItem(Item i);
}
然后我会将它注入那些内部视图模型中,我想你对我的意思有感觉。另一方面,您也可以使用which 用于不相关组件(视图模型)IEventAggregator
之间的松散耦合通信,例如在您的情况下,因此您在聚合器上发布消息以进行导航,并侦听这些消息并正确处理它们。根据您的具体内部情况,您甚至可以提出更好的想法。希望有帮助。MenuViewModel