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" />
注意,DialogConductorView
在ShellView
始终显示在应用程序的内容,但DialogConductorView
内Grid
才可见如果ActiveItem
不为空。
<Grid Visibility="{Binding ActiveItem, Mode=TwoWay,
Converter={StaticResource nullToCollapsed}}"
啊哈!我错过了那一个。我还没有详细看过对话框,但假设他们住在每个工作区内。所以当我删除内容控件,并且工作区之间的切换仍然有效时,我开始相信对话管理员根本没有任务... 非常感谢! – Vegar
所以这里是问题..应该使用窗口还是这个方法? – GorillaApe
任何一种技术都是有效的,这取决于你希望你的对话框是一个模态窗口,还是内容覆盖当前窗口。 – devdigital