我有一个关于“Hello Screens”Caliburn Micro示例的3部分问题。 (我正在使用项目的WPF端口)。这涉及CustomerView.xaml的行为,其中包含“保存”和“关闭”按钮对。愿意接受只有1和2的答案为3可能在这一点上变得微不足道了!
每当DialogConductorViewModel激活AddressViewModel时,“保存”和“关闭”按钮都将被禁用。这发生在CustomerViewModel的EditAddress函数中:
Dialogs.ShowDialog(new AddressViewModel());
1)CustomerView的用户控件如何知道在这里被禁用?我的第一个想法是CustomerViewModel(CMV)必须已停用,因此CM可能会为我们禁用CustomerView UserControl。但是,如果在CMV中重写OnDeactivate,则只要显示带有“ShowDialog”功能的对话框,视图模型就不会被停用。
2)从WPF的角度来看,如何禁用CustomerView上的所有控件?如果我将此代码放在CustomerView.xaml中的某个位置并运行该项目,则CustomerView UserControl将始终保持启用状态:
<TextBlock Text="{Binding Path=IsEnabled,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"></TextBlock>
但是,如果我将任何控件上的IsEnabled绑定到CustomerView.xaml上,则在显示对话框时控件的IsEnabled属性被设置为false:
<TextBlock Text="{Binding Path=IsEnabled,
ElementName=TryClose }"></TextBlock>
3)我想编写一个样式数据触发器,以便在显示对话框时改变CustomerView外观的其他方面。理想情况下,我将绑定到CustomerViewModel上的属性,但我能说的最好,这个ViewModel本身并不知道它何时通过DialogManager显示一个Dialog,除非我错过了什么。从CustVM的角度来看,CM是否为我提供了检测此对话框的方法?
谢谢,
肖恩