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

WinUI中ContentControl的DataTemplateSelector无法生效问题

WinUI中ContentControl的DataTemplateSelector未触发的解决方法

问题现象

运行应用时,ContentControl未使用指定的DataTemplate,而是显示ViewModel的完整类名。已实例化MyDataTemplateSelector类,但SelectTemplateCore方法从未被调用,且无异常抛出。

原因分析

在WinUI/UWP框架中,ContentControl选择模板时会调用带有DependencyObject参数的SelectTemplateCore(object item, DependencyObject container)重载,而非仅带object参数的版本。当前代码仅重写了后者,导致自定义模板选择逻辑未被执行,控件默认显示对象的ToString()结果。

解决方案

修改MyDataTemplateSelector类,添加对带DependencyObject参数的SelectTemplateCore重载的重写,在其中调用原有模板选择逻辑。

修改后的代码

public class MyDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate Normal { get; set; }

    protected override DataTemplate SelectTemplateCore(object item)
    {
        return this.Normal;
    }

    // 新增此重载,ContentControl会调用这个方法
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        return SelectTemplateCore(item);
    }
}

说明

添加该重载后,ContentControl触发模板选择时会调用带container参数的方法,进而执行你定义的模板选择逻辑,即可正确应用指定的DataTemplate。

内容的提问来源于stack exchange,提问作者codymanix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:20:00