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
相关产品推荐
相关产品推荐

