我从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应该是操纵他们。在类似的情况下,正确的方法是什么?
答案 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}/>
这为读者提供了一个更好的主意对视图的期望。可混合性也可能更好。