隐式数据模板不起作用。

10

为什么下面这个隐式的 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个回答

12

DataType 属性的类型为 Object,因此需要使用 x:Type。如果你设置 DataType="ns:Type",那么它将被设置为字符串 "ns:Type"。如果该属性的类型为 Type(例如 Style.TargetType),则 XAML 处理器会自动将该字符串转换为 Type

因此在这里应该写:

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

(该属性类型为Object,以允许将XML数据用作数据模板化,有关更多信息,请参见文档)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接