Caliburn Micro WPF:Message.Attach with guard 属性 禁用整个主机控制
Caliburn Micro WPF: Message.Attach with guard property disables whole host control
我在 WPF 应用程序中使用 Caliburn.Micro(2.0.2,目前是最新版本)。假设我有一个简单的项目列表,我想对 selected 项目启用一些操作。该动作绑定到一个按钮。
因此,我的 VM 公开了这些项目的可绑定集合(例如 Persons
),以及绑定到 selected 项目的相同类型的对象(例如 SelectedPerson
) .假设该操作对应于名为 Test
的方法,并且我有一个守卫 属性 CanTest
,当 selected 项不为空时,它 returns 为真。当SelectedPerson
变化时,我也为CanTest
调用NotifyOfPropertyChanged
。
这个微不足道的场景工作正常:当什么都没有 selected 时,与我的操作对应的按钮被禁用;当我 select 任何项目时,它被启用。
当我使用 Message.Attach
将方法绑定到控件事件时出现问题:假设我想将其附加到鼠标双击。我的 XAML 看起来像这样:
<ListBox ItemsSource="{Binding Path=Persons,Mode=OneWay}"
SelectedItem="{Binding Path=SelectedPerson,Mode=TwoWay}"
cal:Message.Attach="[Event MouseDoubleClick] = [Action Test]"/>
这会完全禁用控件(整个控件,不仅是后代按钮,所以我永远无法 select ListBox 中的某个项目,它永远处于禁用状态)。我必须启用它的唯一方法是从我的 VM 中删除守卫 属性(或从视图中删除 Message.Attach
)。
您可以在 http://1drv.ms/1OTSgq2 找到一个简单的重现。
我还在 https://caliburnmicro.codeplex.com/discussions/246571 找到了这个 post,这似乎表明附加消息会禁用保护属性的基于约定的逻辑,因此您必须显式绑定 IsEnabled
属性 的控制给你守卫属性。我试过了,但没有任何变化。
由于 Caliburn 的约定,在您的情况下,我建议仅将 CanTest
的 属性 名称更改为 IsTestEnabled
.
之类的名称
我在 WPF 应用程序中使用 Caliburn.Micro(2.0.2,目前是最新版本)。假设我有一个简单的项目列表,我想对 selected 项目启用一些操作。该动作绑定到一个按钮。
因此,我的 VM 公开了这些项目的可绑定集合(例如 Persons
),以及绑定到 selected 项目的相同类型的对象(例如 SelectedPerson
) .假设该操作对应于名为 Test
的方法,并且我有一个守卫 属性 CanTest
,当 selected 项不为空时,它 returns 为真。当SelectedPerson
变化时,我也为CanTest
调用NotifyOfPropertyChanged
。
这个微不足道的场景工作正常:当什么都没有 selected 时,与我的操作对应的按钮被禁用;当我 select 任何项目时,它被启用。
当我使用 Message.Attach
将方法绑定到控件事件时出现问题:假设我想将其附加到鼠标双击。我的 XAML 看起来像这样:
<ListBox ItemsSource="{Binding Path=Persons,Mode=OneWay}"
SelectedItem="{Binding Path=SelectedPerson,Mode=TwoWay}"
cal:Message.Attach="[Event MouseDoubleClick] = [Action Test]"/>
这会完全禁用控件(整个控件,不仅是后代按钮,所以我永远无法 select ListBox 中的某个项目,它永远处于禁用状态)。我必须启用它的唯一方法是从我的 VM 中删除守卫 属性(或从视图中删除 Message.Attach
)。
您可以在 http://1drv.ms/1OTSgq2 找到一个简单的重现。
我还在 https://caliburnmicro.codeplex.com/discussions/246571 找到了这个 post,这似乎表明附加消息会禁用保护属性的基于约定的逻辑,因此您必须显式绑定 IsEnabled
属性 的控制给你守卫属性。我试过了,但没有任何变化。
由于 Caliburn 的约定,在您的情况下,我建议仅将 CanTest
的 属性 名称更改为 IsTestEnabled
.