为什么以下隐式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>
答案 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
以允许对数据进行数据模板化,有关详细信息,请参阅文档)