Caliburn Micro:"儿童" VM在主shell VM中

时间:2011-06-02 19:30:01

标签: caliburn.micro

我从Caliburn.micro开始,我有点困惑。假设我有一个带有2个窗格的UI,例如(这是假的样本)CustomersView和CustomerView,以及2个相应的VM,CustomersViewModel和CustomerViewModel。

现在,我想要将两个窗格都包含在一个主shell中,它应该能够访问所有VM的数据成员:例如。

public class MainViewModel
{
  private CustomerViewModel _vmCustomer;
  private CustomersViewModel _vmCustomers;
  ...
}

由于视图模型是由CM创建的,我如何将主shell连接到它们的每个实例?或者这是一种错误的方法?我不需要在规范意义上的指挥,因为我没有像在MDI中那样激活或停用一组窗格:我有一个带有一些窗格的SDI UI,每个窗格都由它的VM支持,还有一个主shell应该是操纵他们。在类似的情况下,正确的方法是什么?

2 个答案:

答案 0 :(得分:5)

在MainView.xaml中添加两个ContentControl,并为它们指定与代表ViewModel的两个属性的名称相匹配的名称。

视图模型:

public CustomerViewModel CustomerViewModel { get; set; }
public CustomersViewModel CustomersViewModel { get; set; }

查看:

<ContentControl x:Name="CustomerViewModel" />
<ContentControl x:Name="CustomersViewModel" />

答案 1 :(得分:2)

另一种方法是

public CustomerViewModel Customer { get; set; }

<myApp:CustomerView cal:View.Model="{Binding Customer}/>

这为读者提供了一个更好的主意对视图的期望。可混合性也可能更好。