隐式DataTemplate不起作用

时间:2011-11-13 02:25:44

标签: wpf datatemplate

为什么以下隐式DataTemplate不起作用?只有已注释的内联DataTemplate才有效。

注意:如果我删除了DataTemplate,我会看到ProductListView完整类型名称的字符串表示。

<Window.Resources>
  <DataTemplate DataType="vm:ProductListViewModel">
    <v:ProductListView/>
  </DataTemplate>
</Window.Resources>

<TabControl ItemsSource="{Binding Tabs}" TabStripPlacement="Left">
  <TabControl.ItemTemplate>     
    <DataTemplate>
      <TextBlock Text="{Binding Key}"/>
    </DataTemplate>        
  </TabControl.ItemTemplate>
  <TabControl.ContentTemplate>
    <DataTemplate>
      <ContentPresenter Content="{Binding Value}">

        <!--ContentPresenter.ContentTemplate>
          <DataTemplate DataType="vm:ProductListViewModel">
            <v:ProductListView/>
          </DataTemplate>
        </ContentPresenter.ContentTemplate-->

      </ContentPresenter>
    </DataTemplate>
  </TabControl.ContentTemplate>
</TabControl>

1 个答案:

答案 0 :(得分:11)

DataType要求使用x:Type,因为属性的类型为Object,因此如果您键入DataType="ns:Type",则将其设置为字符串"ns:Type"。如果属性的类型为Type(例如,与Style.TargetType一样),则XAML处理器会自动将string转换为Type

因此,你应该写:

  <DataTemplate DataType="{x:Type vm:ProductListViewModel}">
    <v:ProductListView/>
  </DataTemplate>

(属性类型为Object以允许对数据进行数据模板化,有关详细信息,请参阅文档)