.NET MAUI CollectionView无法显示对象列表字符串值的问题
问题排查与解决:MAUI CollectionView绑定不显示数据
你的代码存在两个关键问题,导致CollectionView无法正常显示数据:
1. CollectionView数据模板绑定路径错误
在CollectionView的DataTemplate中,每一项的上下文已经是ObservableCollection<Person>里的单个Person对象,所以绑定属性时不需要加Person.前缀。你原来写的{Binding Person.FirstName}会试图在当前Person实例中查找名为Person的属性,这显然不存在,导致绑定失败。
修改MainPage.xaml中的DataTemplate部分:
<CollectionView.ItemTemplate> <DataTemplate> <StackLayout Margin="5"> <HorizontalStackLayout> <Label Text="First name:" /> <Label Text="{Binding FirstName}" /> </HorizontalStackLayout> <HorizontalStackLayout> <Label Text="Last name:" /> <Label Text="{Binding LastName}" /> </HorizontalStackLayout> <HorizontalStackLayout> <Label Text="Email address: " /> <Label Text="{Binding Email}" /> </HorizontalStackLayout> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate>
2. 重复添加同一个Person实例导致数据被清空
你的ViewModel中只创建了一个Person实例,添加到集合后调用ClearFields()会清空这个实例的所有属性。因为集合里存储的是对象引用,所以列表中显示的项也会变成空值。需要在添加时创建新的Person对象,复制当前输入的值。
修改MainPageViewModel中的AddPersonToListAndDb方法:
[RelayCommand] private void AddPersonToListAndDb() { if (string.IsNullOrWhiteSpace(Person.FirstName) || string.IsNullOrWhiteSpace(Person.LastName) || string.IsNullOrWhiteSpace(Person.Email) || string.IsNullOrWhiteSpace(Person.Password)) return; // 创建新的Person实例,复制当前输入的值 var newPerson = new Person { FirstName = Person.FirstName, LastName = Person.LastName, Email = Person.Email, Password = Person.Password }; Persons.Add(newPerson); Person.ClearFields(); }
完成以上修改后,CollectionView就能正确显示每个Person的属性,且清空输入框不会影响已添加到列表中的数据。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

