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

Emm*_*uel 26 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>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,当CurrentSelectedTreeViewModel返回TypeAViewModel的树节点时,我会看到"MyApp.ViewModel.TypeAViewModel".我希望看到我的TypeAViewModelUserControl.

我尝试在我的一个DataTemplates中放置一个<TextBlock Text ="TESTING"/>元素,只是为了查看问题是否与我的用户控件有关.结果相同.

我有什么想法我做错了吗?

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

Bub*_*rap 30

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

<DataTemplate DataType="{x:Type vm:TypeAViewModel}">
Run Code Online (Sandbox Code Playgroud)

  • DOOH.谢谢Bubblewrap.<MyFace BackgroundColor ="Red"/> (18认同)

Joh*_*wen 6

x:Type是一个MarkupExtension,它需要{}向XAML编译器指示.