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

ListView绑定ObservableCollection后仅显示MenuItem类型名 显示异常如何解决?

问题根因

ListView默认对未指定渲染规则的自定义绑定对象,会调用其ToString()方法输出内容。你自定义的MenuItem类没有重写ToString(),也没有为ListView配置显示规则,所以就输出了MenuItem的完整类型名称。


解决方案

你可以根据自己的需求选择任意一种方案实现:

  • 方案1:单字段显示时直接设置DisplayMemberPath
    只需要在绑定ItemsSource的代码前后加一行配置即可,比如要显示菜品名字段:

    listViewFood.DisplayMemberPath = "Item";
    listViewFood.ItemsSource = MenuItemList;
    

    需要显示价格就将值改为"Price"即可。

  • 方案2:多字段同时显示时配置DataTemplate
    直接在XAML中给ListView添加ItemTemplate模板,自定义每个条目的布局:

    <ListView x:Name="listViewFood">
        <ListView.ItemTemplate>
            <DataTemplate>
                <!-- 自定义布局,绑定对应的属性即可 -->
                <StackPanel Orientation="Horizontal" Spacing="10">
                    <TextBlock Text="{Binding Item}" Width="200"/>
                    <TextBlock Text="{Binding Price}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    
  • 方案3:重写MenuItem类的ToString()方法
    不需要修改ListView的配置,直接修改实体类即可:

    public class MenuItem
    {
        public string Item { get; set; }
        public string Price { get; set; }
        public override string ToString()
        {
            // 自定义输出格式
            return $"{Item} ¥{Price}";
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:02