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

