You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:09:16