.NET MAUI中如何使用ListView展示对象列表?
.NET MAUI ListView 绑定对象列表问题解决
问题根源
你在TextCell里使用{Binding Almacenes.nombre}是错误的——当ListView绑定到Almacenes集合后,DataTemplate内部的绑定上下文已经自动切换为集合中的单个Almacenes对象,不需要再通过集合名称去访问属性。
修复步骤
1. 修正XAML中的绑定路径
把TextCell的绑定改为直接指向对象属性:
<ListView ItemsSource="{Binding Almacenes}"> <ListView.ItemTemplate> <DataTemplate> <TextCell Text="{Binding nombre}" Detail="{Binding nombre}" /> </DataTemplate> </ListView.ItemTemplate> </ListView>
2. 确保Almacenes类的属性是公共可访问的
需要保证Almacenes类的属性拥有公共getter,否则绑定无法读取值:
public class Almacenes { public string id { get; set; } public string nombre { get; set; } public string cve { get; set; } }
3. 给页面设置BindingContext
在页面的构造函数中,将ViewModel实例赋值给BindingContext,否则绑定逻辑不会生效:
在SeleccionAlmacen.xaml.cs中添加代码:
public SeleccionAlmacen() { InitializeComponent(); BindingContext = new SeleccionAlmacenViewModel(); }
完整修复后的代码示例
XAML代码:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Ventas_Citel.Views.SeleccionAlmacen" xmlns:viewmodel="clr-namespace:Ventas_Citel.ViewModels" x:DataType="viewmodel:SeleccionAlmacenViewModel" Title="SeleccionAlmacen"> <ListView ItemsSource="{Binding Almacenes}"> <ListView.ItemTemplate> <DataTemplate> <TextCell Text="{Binding nombre}" Detail="{Binding nombre}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> </ContentPage>
ViewModel代码:
public partial class SeleccionAlmacenViewModel : ObservableObject { public SeleccionAlmacenViewModel() { Almacenes = new ObservableCollection<Almacenes> { new Almacenes { id = "1", nombre = "Almacen 1", cve = "1" }, new Almacenes { id = "2", nombre = "Almacen 2", cve = "2" }, new Almacenes { id = "3", nombre = "Almacen 3", cve = "3" } }; } [ObservableProperty] ObservableCollection<Almacenes> almacenes; }
Almacenes类代码:
namespace Ventas_Citel.Models // 根据你的项目实际命名空间调整 { public class Almacenes { public string id { get; set; } public string nombre { get; set; } public string cve { get; set; } } }
完成以上修改后,ListView就能正确展示每个Almacenes对象的nombre属性,实现你想要的列表效果。
内容的提问来源于stack exchange,提问作者Reyneer Leon
相关产品推荐
相关产品推荐

