我正在将Caliburn.Micro(2.0.2,当前最新版本)与WPF应用程序一起使用。假设我有一个简单的项目列表,并且想对所选项目启用一些操作。该动作绑定到一个按钮。
因此,我的VM公开了这些项目的可绑定集合(例如Persons
),并且相同类型的对象绑定到了所选项目(例如SelectedPerson
)。说动作对应于一个名为的方法Test
,并且我有一个guard属性CanTest
,当所选项目不为null时,该属性返回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找到一个简单的repro 。
我还在https://caliburnmicro.codeplex.com/discussions/246571上找到了这篇文章,这似乎表明附加一条消息会禁用保护属性的基于约定的逻辑,因此您必须显式绑定IsEnabled
控件的属性到您的警卫财产。我尝试过,但是没有任何变化。
因为卡利的约定,你的情况我建议仅仅是属性名称更改CanTest
为类似IsTestEnabled
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句