为Caliburn.Micro Action Message指定自定义防护属性

时间:2014-04-11 10:08:15

标签: c# wpf mvvm caliburn.micro

使用Caliburn.Micro,我可以有一个guard属性来定义IsEnabled状态,例如:一个按钮:

<Button cal:Message.Attach="DoSomething" Content="Do it"/>

在ViewModel中

public bool CanDoSomething { get {...} }

public void DoSomething() {... }

我的问题是我在功能区菜单中有很多按钮和相应的操作。几乎所有按钮都具有相同的保护逻辑,例如“如果应用程序不忙于长时间运行,则启用”。我的VM容易混杂在一起,所有“CanXYZ”属性都具有相同的内容。当然,所有防护属性都可以委托给包含实际逻辑的单个属性,但有没有办法避免所有这些单一防护属性?像

这样的东西
<Button cal:Message.Attach="DoSomething" cal:Message.Attach.Guard="IsAppIdle" Content="Do it"/>

提前致谢...

1 个答案:

答案 0 :(得分:0)

并非不可能这样做,但DoSomething连接ViewModel,而Caliburn Micro的工作方式是它在datacontext中查找属性。我可以看到这最终得到了一个静态类,它可以在调用RaiseCanExecute时调用。

Attach也是附属财产。您必须将该属性更改为包含Guard的类,以便您最终必须编写我建议的内容或扩展caliburn micro的Message类。<\ n / p>