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

WinUI 3.0 ListView分组表头正常但列表项仅显示类名如何解决

问题根因

分组表头正常显示说明分组排序逻辑、CollectionViewSource配置均无问题,列表项显示项目名.类名格式字符串,是因为未配置ListView的ItemTemplate(列表项数据模板):ListView不知道如何解析渲染Contact实例的属性,默认会调用对象的ToString()方法,直接输出类型的全限定名。

修复方案

在ListView中新增ItemTemplate配置,明确指定每个Contact对象要绑定展示的属性和对应布局即可。

修改后的完整XAML代码

<!-- 注意先在页面头部引入Contact类所在命名空间,例如:
xmlns:local="using:TestApp"
和你引入GroupInfoList的xmlns:local1写法规则一致
-->
<ListView ItemsSource="{x:Bind ContactsCVS.View, Mode=OneWay}">
    <CollectionViewSource x:Name="ContactsCVS" IsSourceGrouped="True"/>
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsStackPanel AreStickyGroupHeadersEnabled="False"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>

    <!-- 新增:列表项渲染模板 -->
    <ListView.ItemTemplate>
        <DataTemplate x:DataType="local:Contact">
            <!-- 可根据需求调整布局,以下为参考示例的双行文本布局 -->
            <StackPanel Spacing="4" Padding="12,8">
                <TextBlock Text="{x:Bind Name}" Style="{ThemeResource BodyStrongTextBlockStyle}"/>
                <TextBlock Text="{x:Bind Company}" Style="{ThemeResource CaptionTextBlockStyle}" Opacity="0.6"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>

    <ListView.GroupStyle>
        <GroupStyle >
            <GroupStyle.HeaderTemplate>
                <DataTemplate x:DataType="local1:GroupInfoList">
                    <Border AutomationProperties.Name="{x:Bind Key}" Padding="12,8,12,4">
                        <TextBlock Text="{x:Bind Key}" Style="{ThemeResource TitleTextBlockStyle}"/>
                    </Border>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

注意事项

  • 代码中x:DataType="local:Contact"的命名空间别名local,要替换为你项目页面对应的实际命名空间引入别名,保证编译时可正确识别Contact类型。
  • DataTemplate内的布局可自由调整,比如添加头像控件、更多联系人信息字段,直接绑定Contact类的对应属性即可。

可选简易方案(不推荐)

如果仅需要纯文本展示,不需要自定义样式布局,也可以直接重写Contact类的ToString()方法:

public class Contact
{
    // 原有属性、构造函数保留
    public override string ToString()
    {
        return $"{Name} | {Company}";
    }
}

该方案灵活性极差,无法实现多控件排版、差异化字体样式等效果,仅适合极简场景临时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:39:54