编程语言
首页 > 编程语言> > c# – Caliburn Micro WPF:带有guard属性的Message.Attach禁用整个主机控制

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

作者:互联网

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

因此,我的VM公开了这些项目的可绑定集合(例如,人员),以及绑定到所选项目的相同类型的对象(例如,SelectedPerson).假设该操作对应于名为Test的方法,并且我有一个保护属性CanTest,当所选项不为null时返回true.当SelectedPerson更改时,我还为CanTest调用NotifyOfPropertyChanged.

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

当我使用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属性显式绑定到guard属性.我尝试了这个,但没有任何改变.

解决方法:

由于Caliburn的惯例,在你的情况下,我建议只将CanTest的属性名称更改为IsTestEnabled.

标签:c,wpf,caliburn-micro
来源: https://codeday.me/bug/20190702/1360441.html