在我第一个尝试 Caliburn.Micro 的项目中,我喜欢很多东西 :-)
我想念(或尚未发现)的一件事是如何分离 View 模型和命令。
CM不支持ICommand,它的处理方式是superior .我确信这是真的,所以我希望朝着正确的方向小幅插入以实现这一目标,或者可能发现更好的方法。
据我了解,您必须将“Execute”方法和“CanExecute”属性直接放在 View 模型中,命名为与 View 中的控件匹配,以使魔法发挥作用。
我想将“Execute”和“CanExecute”放在作为 View 模型属性的不同对象中,然后 CM 会自动绑定(bind)到该对象,通常使用控件名称和属性名称。
Repost从 Caliburn Micro 的论坛上,我没有得到任何答案,所以我在这里试试运气。
最佳答案
您应该尽量避免使 Law of Demeter 无效。 .因此,在您的 View 模型上,您可以有一个执行方法和一个 CanExecute
属性(通常是计算出来的),并且这些可以在适当的地方调用包含模型,例如:
public void Save
{
// .. save logic
}
public bool CanSave
{
get
{
return this.model.CanSave ... and other logic etc.
}
}
您必须记住在可以保存状态更改时通知计算属性的更改,例如:
public void CodeThatGetsRunWhenAPropertyOfTheModelChanges()
{
this.NotifyOfPropertyChanged(() => this.CanSave);
}
如果你有例如一个
Button
在您看来,x:Name="Save"
,然后 Caliburn.Micro 将自动调用您的 Save
单击按钮时 View 模型上的动词,当 CanSave
时将自动启用和禁用按钮属性值变化。
关于mvvm - Caliburn Micro 中的命令类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102286/