Caliburn.Micro.的层次导航模型

本文关键字:导航 模型 层次 Micro Caliburn | 更新日期: 2023-09-27 18:30:01

我想在WPF MVVM应用程序中实现以下分层导航模型:

ShellView
    Page1View
       Subpage1View
           Subpage2View
       Subpage3View
    Page2View
        ...

这意味着在Shellview上,我有激活/停用Page1View和Page2View的按钮。在Page1View上有激活Subpage1View和Subpage3View的按钮,而Subpage1View有激活Subpage 2View的按钮。

子页面应该显示在哪里?导航模型是否应该剧烈地映射到视图结构?我的意思是,我在ShellView上有一个ContentControl(名为ActiveItem),激活后会显示Page1View和Page2View。子页面视图应该显示在Shell的ActiveItem ContentControl上还是显示在父视图(页面视图)上?

  1. 如果我应该在ShellView上显示一个子页面,那么如何正确激活它?因为激活它的按钮在Page1View上,而不是在shell上。

  2. 如果我应该在父视图(Page1View)上显示一个子页面,那么我必须在Page1View上创建一个ActiveItemContentControl并在需要它之前将其隐藏。怎样此外,我想父视图滚动条可能会成为一个问题。

请告知!

使用Caliburn.Micro 1.3、.NET 4、WPF。

谢谢!

Caliburn.Micro.的层次导航模型

我一起做了一个演示。我不确定这是否正是你想要的。需要记住的是ScreensConductors可以包含Screens和/或Conductors。因此,嵌套或进行复杂的屏幕合成是非常直接的。

此示例有一个带有2个按钮的ShellView和一个ContentControlPage1ViewModel还具有2个按钮和一个ContentControl

单击ShellView上的Page1Page2按钮可激活相应的PagePage激活后也是如此,单击SubPage1SubPage2会激活相应的SubPage

https://bitbucket.org/dbeattie/cmwpfnavsample/src

我们这样使用子页面:

  • 子页面本身显示在页面视图中的ContentControl中。因此,我们有一个shell视图,它有一个ContentControl来显示活动页面,在这个活动页面中,还有另一个Content控件来显示活动子页面
  • 我们在shell视图本身上显示当前页面的子页面列表(因为布局),所以我们有绑定到ActiveItem.Items的ItemsControl(前提是ActiveItem是从Conductor继承的页面)

因此,我们只需使用ItemsControl来选择当前活动的页面或子页面,然后使用ContentControl来显示它。请注意,所选的子页面是通过其父页面视图显示的。

但基本上,是直接在shell视图上显示子页面(绑定到ActiveItem.ActiveItem的ContentControl),还是使用其他方式,都取决于您。

虽然不包括子页面,但Coproject示例应用程序可能会对您有所帮助。我计划让它变得更复杂,稍后再添加子页面。

广告2。我认为您不需要隐藏ContentControl——如果没有选择子页面,它将是空的。然而,如果你想隐藏它,我建议使用ValueConverter(从object到Visibility,如果object==null,那么Visibility。Collapsed,否则为Visible),并将ActiveItemContentControl的Visibility属性再次绑定到ActiveItem。