[英]ActivateItem not working in Caliburn.Micro
我正在將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。
您這里擁有的是Windows的某種生命周期。 這必須由ActiveItem
的父窗口來處理。
caliburn.micro方法的實現方法是在ActiveItem
上方ActiveItem
一個Conductor。 在您的情況下,這是MainWindow
。
您的RibbonViewModel
也可以是導體。 但這只是為了自己的孩子。 可以有多個導體。
將屏幕激活生命周期的概念引入應用程序后,您需要某種方式來實施它。 這就是ScreenConductor的角色。 顯示屏幕時,導體將確保其已正確激活。
這是一個很直接的說法:如果您具有激活/生命周期,請使用導體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.