使用Caliburn.Micro进行导航

时间:2013-07-03 11:23:17

标签: wpf navigation caliburn.micro

我想知道使用Caliburn.Micro在两个不相关的视图模型之间导航的最常规方法是什么?假设在应用程序的一个部分中有一个视图模型树:ParentViewModel-> ChildVM1-> ChildVM2等。此外,还有一个OmniVM应该能够导航到任何上述视图模型。通过“导航”我的意思是找到适当的实例(之后激活部分很简单)。 我不想涉及任何IEventAggregator的使用,也不想使用Container.Resolve这类东西。 感谢您的回复

1 个答案:

答案 0 :(得分: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);
}

然后我会把它注入那些内部视图模型,我想你有一种我的意思。另一方面,您也可以使用IEventAggregator用于在不相关的组件(viewmodels)之间进行松散耦合的通信,例如在您的情况下,因此您在聚合器上发布消息以进行导航并且MenuViewModel会侦听这些并正确处理它们。根据您的具体内部情况,您甚至可能会有更好的想法。希望有所帮助。