隐式 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>
Why does the following implicit DataTemplate
not work? Only the commented inline DataTemplate
will work.
Note: If I remove both DataTemplate
s, I see a string representation of the ProductListView
full type name.
<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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DataType
需要使用x:Type
作为属性的类型是Object
,因此,如果您键入DataType="ns:Type"
,则将其设置为细绳“ns:类型”
。如果属性的类型是Type
(与Style.TargetType
)XAML 处理器会自动将该字符串
转换为Type
。因此,在这里您应该编写:
(属性类型是
Object
以允许 XML 数据的数据模板化,有关更多信息,请参阅文档)DataType
requires the use ofx:Type
as the property's type isObject
, so if you typeDataType="ns:Type"
you set it to the string"ns:Type"
. If the property's type wereType
(as withStyle.TargetType
for example) the XAML processor would automatically convert thatstring
to aType
.Thus here you should write:
(The property type is
Object
to allow data-templating of XML data, see the documentation for more information on that)