如何基于ContentControl的当前内容的DataType自动使用DataTemplate

时间:2010-06-30 12:14:14

标签: wpf xaml datatemplate

当我尝试指定多个DataTemplates供ContentControl使用以便使用正确的(基于Type)时,我最终得到的内容只是Content的ToString()值。

<ContentControl DataContext="{Binding MyTreeRootViewModels}" Content="{Binding /, Path=CurrentlySelectedTreeViewModel}">
  <ContentControl.Resources>
     <DataTemplate DataType="x:Type vm:TypeAViewModel">
        <StackPanel>
           <local:TypeAUserControl />
           </StackPanel>
     </DataTemplate>

     <DataTemplate DataType="x:Type vm:TypeBViewModel">
        <StackPanel>
           <local:TypeBUserControl />
        </StackPanel>
     </DataTemplate>
  </ContentControl.Resources>
</ContentControl>

在上面的示例中,当CurrentSelectedTreeViewModel返回TypeAViewModel的树节点时,我会看到“MyApp.ViewModel.TypeAViewModel”。我期待看到我的TypeAViewModelUserControl。

我尝试过放一个&lt; TextBlock Text =“TESTING”/&gt;我的一个DataTemplates中的元素只是为了查看问题是否与我的用户控件有关。结果相同。

任何想法我做错了什么?

(顺便说一下,CurrentlySelectedTreeViewModel是一个在我的树视图中返回当前所选节点的属性。它似乎工作正常 - 当我在树中选择节点时,节点的正确类型名称显示为ContentControl)。 / p>

2 个答案:

答案 0 :(得分:29)

x:Type位应在花括号{}之间:

<DataTemplate DataType="{x:Type vm:TypeAViewModel}">

答案 1 :(得分:6)

x:Type MarkupExtension ,需要{}来指示XAML编译器。