繁体   English   中英

ActivateItem在Caliburn.Micro中不起作用

ActivateItem not working in Caliburn.Micro

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在将Caliburn Micro用于MVVM。 在我的MainView(外壳)中,我有两个控件。 一个承载一个RibbonView,另一个承载ContentControl,该控件根据RibbonView菜单选择加载内容。 这是MainView(外壳)

MainView(外壳)

<Window x:Class="HotelReservation.Main.Views.MainView">
    <DockPanel>

        <ContentControl x:Name="RibbonView" DockPanel.Dock="Top"/>

        <Grid DockPanel.Dock="Bottom" VerticalAlignment="Stretch" >
            <ContentControl x:Name="ActiveItem"/>
        </Grid>
    </DockPanel>
</Window>

RibbonView

<Ribbon Margin="0,-20,0,0">
    <RibbonTab Header="Room Band">
        <RibbonGroup>
            <RibbonButton Label="List" x:Name="RoomBandMain"
                             LargeImageSource="/HotelReservation.Global;component/Images/room-band-list-icon.png">
            </RibbonButton>
        </RibbonGroup>
    </RibbonTab>
</Ribbon>

RibbonViewModel

public class RibbonViewModel : Conductor<object> {

    public void RoomBandMain() { //Load in ActiveItem of MainView
        ActivateItem(container.GetExportedValue<RoomBandMainViewModel>());
    }
}

可以看出,我正在尝试在<ContentControl x:Name="ActiveItem"/>加载RoomBandMainViewModel ,问题是它没有加载,即使ActivateItem(container.GetExportedValue<RoomBandMainViewModel>())代码运行。 我认为<ContentControl x:Name="ActiveItem"/>不存在于RibbonView中,而是存在于其父MainView中 ,因此ActivateItem不起作用。

如何解决这个问题。

编辑:

我必须将<ContentControl x:Name="ActiveItem"/>的DataContext设置为RibbonViewModel,以便ActiveItem现在是RibbonViewModel的属性,而不是MainViewModel。 MainViewModel如下所示

所以MainView(shell)现在如下

<Window x:Class="Conductor_Main.Views.MainView">

    <DockPanel>
        <ContentControl x:Name="RibbonView" DockPanel.Dock="Top"/>

        <Grid DockPanel.Dock="Bottom" VerticalAlignment="Stretch" Background="Green"  
               DataContext="{Binding RibbonView}">

            <ContentControl x:Name="ActiveItem" />
        </Grid>
    </DockPanel>
</Window>

现在, <ContentControl x:Name="ActiveItem" />实际上属于RibbonViewModel。

1 个回复

您这里拥有的是Windows的某种生命周期。 这必须由ActiveItem的父窗口来处理。

caliburn.micro方法的实现方法是在ActiveItem上方ActiveItem一个Conductor。 在您的情况下,这是MainWindow

您的RibbonViewModel也可以是导体。 但这只是为了自己的孩子。 可以有多个导体。

caliburn文档

将屏幕激活生命周期的概念引入应用程序后,您需要某种方式来实施它。 这就是ScreenConductor的角色。 显示屏幕时,导体将确保其已正确激活。

这是一个很直接的说法:如果您具有激活/生命周期,请使用导体。

1 Caliburn.Micro中ActivateItem之后的操作

我有个问题。 我在启动ActivateItem位置有一个按钮: 如果ActivateItem结束,是否可以hang应用程序并转到if语句? 如何在Caliburn.Micro中等待ActivateItem结束? 编辑: 尝试类似的东西: 使用Tasks,但是当 ...

2 为什么caliburn.Micro解释不起作用?

我在caliburn.micro网站上工作,他们有这个例子。 为什么密码返回null?! 请参阅此处我尝试使用的示例的图片。 我的view.xaml: 在viewModel.cs中: 我已设法获取登录按钮以激活Login方法,它显示用户名但空白的密码。 ...

5 用户控件上的WPF可见性不起作用-使用Caliburn.Micro

我有一个旋转的“等待”图形的用户控件。 我已将其添加到表单中,并使用此线程中的代码在Caliburn.Micro中设置了约定 然后,我按照命名约定创建了一个属性,并相应地将此用户控件命名为: 我的财产看起来像这样: 我可以看到控件已绑定,并且当表单启动时,微调器是不可见的 ...

7 Caliburn.Micro通过View.Context的多个视图不起作用

我想对同一viewmodel使用多个视图。 我似乎无法解决。 我究竟做错了什么? 简单的例子: 文件视图模型: 文件列表视图模型: 文件列表视图。 这是我尝试使用View.Context的地方,但是不起作用 : 文件视图1:详细信息: 文件视图2,简 ...

8 Caliburn.Micro中的UserControl

在我的应用程序中,我使用Caliburn.Micro绑定View和ViewModel。 在我的一种观点中,我想使用CrystalReportsViewer用户控件,但我不知道该怎么做。 首先,我尝试类似的事情(cr是SAPBusinessObjects.WPF.Viewer的同盟) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM