Caliburn Micro WPF:带有guard属性的Message.Attach禁用整个主机控件

时间:2015-04-26 07:43:32

标签: c# wpf caliburn.micro

我使用带有WPF应用程序的Caliburn.Micro(2.0.2,目前是最新版本)。假设我有一个简单的项目列表,我想对所选项目启用一些操作。该动作绑定到一个按钮。

因此,我的VM公开了这些项目的可绑定集合(例如Persons),以及绑定到所选项目的相同类型的对象(例如SelectedPerson)。假设该操作对应于名为Test的方法,并且我有一个保护属性CanTest,当所选项不为空时,它返回true。当SelectedPerson发生变化时,我也会为NotifyOfPropertyChanged致电CanTest

这个简单的场景可以正常工作:当没有选择任何内容时,禁用与我的操作对应的按钮;当我选择任何项目时,它会被启用。

当我使用Message.Attach将方法绑定到控件事件时出现问题:说我想将其附加到鼠标双击。我的XAML看起来像这样:

<ListBox ItemsSource="{Binding Path=Persons,Mode=OneWay}"
         SelectedItem="{Binding Path=SelectedPerson,Mode=TwoWay}"
         cal:Message.Attach="[Event MouseDoubleClick] = [Action Test]"/>

这完全禁用了控件(整个控件,不仅是后代按钮,因此我永远不能选择ListBox中的项目,它永远保持禁用状态)。我必须启用它的唯一方法是从我的VM(或视图中的Message.Attach)中删除guard属性。

您可以在http://1drv.ms/1OTSgq2找到一个简单的复制品。

我还在https://caliburnmicro.codeplex.com/discussions/246571发现了这篇文章,这似乎暗示附加消息会禁用基于约定的保护属性逻辑,因此您必须显式绑定控件的IsEnabled属性你的警卫财产。我试过这个,但没有任何改变。

1 个答案:

答案 0 :(得分:2)

由于Caliburn的约定,在您的情况下,我建议仅将CanTest的属性名称更改为IsTestEnabled

相关问题