使用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"/>
提前致谢...
答案 0 :(得分:0)
并非不可能这样做,但DoSomething
连接ViewModel
,而Caliburn Micro的工作方式是它在datacontext中查找属性。我可以看到这最终得到了一个静态类,它可以在调用RaiseCanExecute
时调用。
Attach
也是附属财产。您必须将该属性更改为包含Guard
的类,以便您最终必须编写我建议的内容或扩展caliburn micro的Message
类。<\ n / p>