Caliburn.Micro,HelloScreens-sample

Caliburn.Micro,HelloScreens-sample

问题描述:

我想了解Caliburn.Micro附带的HelloScreens样本。 ShellView.xaml包括在底部的ContentControl。有人可以解释这个元素的重要性吗?我试图评论它没有看到任何区别。Caliburn.Micro,HelloScreens-sample

<UserControl x:Class="Caliburn.Micro.HelloScreens.Shell.ShellView" 
      xmlns:...> 
    <Grid> 
    <local:TiledBackground SourceUri="/Resources/Images/backgroundtexture.png" /> 
     <Image Source="/Resources/Images/backgroundshadow.png" 
       Stretch="Fill" /> 

     <ct:DockPanel> 
      <.../> 
     </ct:DockPanel> 

     <!-- Whats this one for? --/> 
     <ContentControl x:Name="Dialogs" 
         VerticalContentAlignment="Stretch" 
         HorizontalContentAlignment="Stretch"/> 
    </Grid> 

</UserControl> 

它绑定到的ViewModels Dialogs - 属性,这是一个IConductActiveItem定制实现,但它是什么用的?

无论何时您的ContentControl与视图模型属性的名称相同,Caliburn.Micro都会为该视图模型找到相应的视图,将视图注入ContentControl,并将视图模型绑定到视图。

在这种情况下,Dialogs属性是如你所说的IDialogManager类型,其解析为DialogConductorViewModel(导体类型)。所以DialogConductorView被注入到内容控件中。

此视图显示应用程序中的对话框,如果您查看视图,它也有一个ContentControl,它显示当前的ActiveItem。这是Caliburn.Micro导体的典型特征。

<Controls:CustomTransitionControl x:Name="ActiveItem" Margin="8" /> 

注意,DialogConductorViewShellView始终显示在应用程序的内容,但DialogConductorViewGrid才可见如果ActiveItem不为空。

<Grid Visibility="{Binding ActiveItem, Mode=TwoWay, 
Converter={StaticResource nullToCollapsed}}" 
+0

啊哈!我错过了那一个。我还没有详细看过对话框,但假设他们住在每个工作区内。所以当我删除内容控件,并且工作区之间的切换仍然有效时,我开始相信对话管理员根本没有任务... 非常感谢! – Vegar

+0

所以这里是问题..应该使用窗口还是这个方法? – GorillaApe

+0

任何一种技术都是有效的,这取决于你希望你的对话框是一个模态窗口,还是内容覆盖当前窗口。 – devdigital