我正在使用Caliburn Micro for MVVM。在我的MainView(shell)中,我有两个控件。一个托管一个RibbonView,另一个ContentControl根据RibbonView菜单选项加载内容。这里是的MainView(壳)ActivateItem无法在Caliburn.Micro中工作
的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>());
}
}
可以看出,我试图加载RoomBandMainViewModel在<ContentControl x:Name="ActiveItem"/>
问题是它没有加载,我得到一个空白的屏幕,即使ActivateItem(container.GetExportedValue<RoomBandMainViewModel>())
代码运行。我认为<ContentControl x:Name="ActiveItem"/>
不存在RibbonView但其父母MainView,因此ActivateItem不起作用。
如何解决此问题。
编辑:
我不得不设置<ContentControl x:Name="ActiveItem"/>
到RibbonViewModel的DataContext的,让ActiveItem
现在RibbonViewModel的财产,而不是MainViewModel。 MainViewModel看起来像下面
所以的MainView(壳)现在是如下
<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。
这看起来像我在做什么,不得不仔细看看。稍后回答。 – 2015-03-31 06:02:18
我正在做的正是你在这里做一个项目。也许有一些关于你的mainwindow/shellview的信息缺失。在我的情况下,ShellViewModel是指挥,所以它有一个Activeitem。我想在那里显示的窗口是该主窗口的子窗口。它就像一个魅力。 – 2015-03-31 08:40:17
@MareInfinitus,MainView(问题中显示)是我的应用程序的shell视图。它有两个内容控件RibbonView和ActiveItem。但ActivateItem不在MainViewModel中。它是MainViewModel的子项RibbonViewModel的一部分。总之,当控件位于MainView中时,如何激活RibbonViewModel中的控件。 – Jatin 2015-03-31 10:51:53