当名称与属性匹配时,为什么忽略切换按钮的guard属性?

时间:2014-05-22 19:06:52

标签: c# wpf caliburn.micro

当我有一个ToggleButton定义时:

<ToggleButton Name="Taco"/>

在我的ViewModel中:

public void Taco() {}

public bool CanTaco { get { return false; }}

该按钮已正确禁用。但是,如果我改为使Taco成​​为bool属性以反映ToggleButton的IsChecked状态,那么它将受到CM约定的约束,但不再使用CanTaco属性:

public bool Taco { get; set; }

public bool CanTaco { get { return false; } } // completely ignored

该按钮已启用。我可以手动将IsEnabled绑定到CanTaco,它可以再次正常工作。

在这种情况下,约定是否有理由不使用guard属性,还是一个bug?

1 个答案:

答案 0 :(得分:0)

这是绑定基础结构的限制而不是bug。 Guard方法可以防止动作,因为我们可以“拦截”方法调用并首先检查防护。然而,当它是一个属性时,双向绑定设置属性,并且无处插入警卫的检查。

添加该功能会很高兴,但遗憾的是不可能,保护方法只适用于方法而不是属性。