为了避免胖 ViewModel,你还需要避免胖 View。Caliburn.Micro 允许您按照 Screens 、Conductors 和 Composition中的描述组合 Views/ViewModels 。
简短的版本是,您可以通过在 MasterViewModel 中定义 DetailViewModel 类型的属性并在 MasterView 中添加以它命名的 ContentControl 在“MasterView”/“MasterViewModel”外壳中包含“DetailView”和“DetailViewModel”对。绑定和操作照常工作,因此您避免了胖模型/视图和命令路由。
另一种选择是将 MasterView 元素绑定到 DetailViewModel 属性或操作,方法是将详细信息的属性添加到目标名称之前。我还找不到具体的网址,所以例子是凭记忆的。
假设您有以下课程:
public class MasterViewModel:Screen
{
public property DetailViewModel MyDetails{get;set;}
}
和
public class DetailViewModel:Screen
{
public property string SomeText{get;set;}
public void DoTheBoogie(){}
}
您可以在 MasterView 中添加一个名为“MyDetails_SomeText”的控件以绑定到 DetailViewModel.SomeText。您也可以以同样的方式绑定到 DoTheBoogie。
我更喜欢创建一个单独的视图,命名为 DetailView 并在 MasterView 中添加一个名为“MyDetails”的 ContentControl。这导致更清洁和更模块化的设计