WPF DataTemplate不生效仅显示对象ToString()结果排查
问题根因
自定义DataTemplate未按类型自动生效,核心错误是你给local:model类型对应的DataTemplate设置了x:Key="DT"属性:
- WPF中按数据类型自动匹配的隐式DataTemplate 不能手动设置
x:Key。一旦给DataTemplate指定了Key值,它就会被识别为显式资源,不会再根据绑定对象的类型自动匹配应用。 - ContentControl找不到对应数据类型的渲染模板时,会回退到默认渲染逻辑:直接调用绑定对象的
ToString()方法输出文本,也就是你截图里的显示效果。

修复方法
两种改法选一种即可:
方法1(推荐,符合隐式自动匹配的逻辑)
直接删除DataTemplate上的x:Key="DT"属性,保留DataType配置即可,修改后的DataTemplate代码:
<DataTemplate DataType="{x:Type local:model}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"/> <ColumnDefinition Width="200"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="50"/> <RowDefinition Height="50"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0">Id</TextBlock> <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Id}"/> <TextBlock Grid.Row="1" Grid.Column="0">Name</TextBlock> <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Name}"/> </Grid> </DataTemplate>
改完不需要调整ContentControl的代码,重新运行即可正常渲染自定义布局。
方法2(保留Key值的显式引用写法)
如果需要保留x:Key="DT"的资源标识,就在ContentControl上手动指定要使用的模板,修改ContentControl代码:
<ContentControl Width="400" Content="{Binding Path=Model}" ContentTemplate="{StaticResource DT}" />
内容的提问来源于stack exchange,提问作者LHL
相关产品推荐
相关产品推荐

