WinUI 3 ContentControl绑定的DataTemplateSelector未被调用如何解决
问题修复方案
核心问题:ContentControl未绑定Content属性
ContentTemplateSelector的触发依赖Content属性的取值,你仅为ContentControl设置了DataContext,没有将Content绑定到目标ViewModel实例,所以选择器不会被调用。修正XAML代码:
<Grid> <ContentControl x:Name="content" Content="{x:Bind viewModel}" ContentTemplateSelector="{StaticResource devicesPageTemplateSelector}" DataContext="{x:Bind viewModel}"> </ContentControl> </Grid>
其他需修正的问题
- 类名拼写错误
你在选择器中强制转换时将DevicesViewModel误写为DevicesViweModel,若ViewModel类名拼写正确,选择器触发后会抛出类型转换异常,修正代码:
var viewModel = (DevicesViewModel)item;
- 判断逻辑反向
你当前的无服务判断逻辑写反,!viewModel.IsNoRunningServer代表「不是没有运行中的服务」,此时返回无服务模板和预期逻辑不符,修正为:
if (viewModel.IsNoRunningServer) { return NoRunningServer; }
- 可选(针对UWP/WinUI平台):补充重载方法
部分XAML框架会优先调用双参数的SelectTemplateCore重载,仅重写单参数方法可能不会触发,补充对应重载即可:
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { return SelectTemplateCore(item); }
内容的提问来源于stack exchange,提问作者Joe Wang
相关产品推荐
相关产品推荐

