2011-08-24 72 views
1

在我的項目中,我有TreeView,其中包含各種類型的對象樹(所有子類都來自同一個超類)。WPF使用DataTemplate隱式選擇模板,但在'List'之外

在我的TreeView的右側,我想要一個「面板」(此刻我只有一個網格),它顯示有關樹中當前所選對象的信息。我想使用DataTemplate,如this page的第二個示例中所示,根據子類的類型調整我的「面板」的內容佈局&;然而,我找不到合適的容器(因爲我不想要一個列表控件 - 我想根據樹形視圖中的選擇將我的顯示更改爲一個項目)。

This question問同樣的事情,但我不認爲答案適合我,因爲我希望模板根據類型動態更改。

I.e.我希望這樣的事情:

<[A Suitable Container] Margin="189,39,12,12" DataContext="{Binding ElementName=treeView1, Path=SelectedItem}"> 
<DataTemplate DataType="{x:Type local:subclass1}"> 
    <Grid> 
     <!-- subclass1 specific stuff --> 
    </Grid> 
</DataTemplate> 
<DataTemplate DataType="{x:Type local:subclass2}"> 
    <Grid> 
     <!-- subclass2 specific stuff --> 
    </Grid> 
</DataTemplate> 
</[A Suitable Container]> 

回答

4

使用ContentControl

<ContentControl Content="{Binding ElementName=treeView1, Path=SelectedItem}"> 
    <ContentControl.Resources> 
     <DataTemplate DataType="{x:Type local:ViewModelA}"> 
      <local:ViewA /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:ViewModelB}"> 
      <local:ViewB /> 
     </DataTemplate> 
    </ContentControl.Resources> 
</ContentControl> 
+0

正常使用 - 非常感謝你! – sebf