我使用带有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
属性你的警卫财产。我试过这个,但没有任何改变。
答案 0 :(得分:2)
由于Caliburn的约定,在您的情况下,我建议仅将CanTest
的属性名称更改为IsTestEnabled
。