2011-06-02 62 views
4

我以Caliburn.micro開始,我有點困惑。假設我有一個包含2個窗格的UI,例如(這是一個假示例)CustomersView和CustomerView,以及2個相應的VM,CustomersViewModel和CustomerViewModel。Caliburn Micro:在主外殼虛擬機中的「children」VM

現在,我想要將這兩個窗格都包含在一個主外殼中,它應該能夠訪問所有虛擬機的數據成員:

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

如的ViewModels由CM創建的,我怎麼能我的主殼連接到他們的每一個實例?或者這是一個錯誤的方法?這裏我不需要一個指揮,因爲我沒有激活或關閉一組窗格,就像在MDI中一樣:我有一個SDI UI,其中有一些窗格,每個窗格都由它的虛擬機支持,還有一個主外殼操縱他們。類似情況下的正確方法是什麼?

回答

5

在你的MainView.xaml中添加兩個ContentControls,併爲它們命名與表示ViewModel的兩個屬性的名稱相匹配的名稱。

視圖模型:

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

查看:

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

謝謝,這給了我正確的線索。至於注入虛擬機,我想我可以將[導入]添加到屬性中,因爲我使用的是MEF引導程序,並讓CM創建虛擬機。 – Naftis 2011-06-03 11:35:59

+0

是或者你可以在構造函數中注入它們。 – 2011-06-03 13:07:30

2

另一種方式來做到這一點是

public CustomerViewModel Customer { get; set; } 

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

這給讀者一個更好的主意什麼期望從視圖。可混合性也可能更好。