2012-03-27 88 views
0

這個MVVM的東西讓我頭疼。我有一個應用程序,它有一個左窗格中的編輯列表。在右邊是一個選項卡控件,在其中顯示編輯。我有一個包含視圖模型集合的主應用程序視圖模型。我把這個集合稱爲Workspaces。這是從Microsoft提供的MvvmDemoApp借用的here如何在運行時設置視圖/視圖模型數據模板?

public ObservableCollection<WorkspaceViewModel> Workspaces 
{ 
    get 
    { 
    ... 
    } 
} 

這些工作空間被綁定到一個標籤控制在主應用程序窗口,像這樣:

<DataTemplate x:Key "WorkspacesTemplate"> 
    <TabControl 
    IsSynchonizedWithCurrentItem="True" 
    ItemSource="{Binding Workspaces}" 
    SelectedItem="{Binding ActiveWorkspace}"/> 
</DataTemplate> 
... 
<ContentControl 
    Content="{Binding}" 
    ContentTemplate="{StaticResource WorkspacesTemplate}"/>  

視圖模型被綁定到使用的DataTemplates像這樣的視圖:

<DataTemplate DataType="{x:Type vm:MessageLogViewModel}"> 
    <vw:MessageLogView/> 
</DataTemplate> 

這工作正常。但是,現在我需要使應用程序可配置在編輯器列表從配置文件中讀取的位置。我想這個配置文件將包含每個編輯器的視圖和視圖模型組件。但是,如何將兩者綁定在一起,以便當某人綁定到視圖模型(或視圖模型集合)時,會顯示正確的視圖(類似於DataTemplate的功能,但是在代碼中,而不是XAML中)?

我試圖遠離控制反轉(IoC)技術。我不確定我們的團隊是否已經準備好了這一點。

回答

1

IoC是完美的解決方案,但是如果沒有此選項,您可以使用XmlWriter在視圖模型中創建XAML數據模板並將其作爲要綁定的屬性公開。

編輯:綁定

你有你的視圖模型的列表。在每個視圖模型中(在基本視圖模型類中)創建並公開此XamlTemplate屬性。該物業應的線沿線的創建XAML中:

<DataTemplate xmlns:vw="..."> 
    <vw:MessageLogView/> 
</DataTemplate> 

然後用ContentControl綁定到:

<ContentControl Content="{Binding ViewModel}" 
       ContentTemplate="{Binding ViewModel.XamlTemplate}" /> 
+0

你能否解釋一下?誰將綁定到數據模板屬性? – bsh152s 2012-03-27 21:58:27

+0

@ bsh152s:希望編輯給你更多的指針。 – 2012-03-28 07:23:02

相關問題