Xamarin Forms绑定string[]到ListView显示空TextCell问题
Xamarin ListView绑定string[]显示空项问题解决
我目前在使用Xamarin(下月将迁移至MAUI),遇到一个绑定问题:通过Post请求获取的JSON响应里,普通字符串字段绑定后显示正常,但把string[]类型的字段绑定到ListView时,控件能加载对应数量的项,却显示空的TextCell(比如数组有3个字符串时,会显示3个空条目)。
相关代码
原XAML代码
<ListView ItemsSource="{Binding Specialities, Mode=TwoWay}" Grid.Row="8" Grid.Column="1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> <ListView.ItemTemplate> <DataTemplate> <TextCell DetailColor="Black" TextColor="Black" Text="{Binding .}" /> </DataTemplate> </ListView.ItemTemplate> </ListView>
ViewModel代码
private string[] _specialities; public string[] Specialities { get => _specialities; set => SetProperty(ref _specialities, value); }
JSON响应处理代码
string resultadoRespuesta = await response.Content.ReadAsStringAsync(); var problemDetails = JsonConvert.DeserializeObject<AbogadosAtlasApi>(resultadoRespuesta); Nombres = problemDetails.FirtsNameOriginal; Apellidos = problemDetails.LastNameOriginal; Celular = problemDetails.Celular; Correo = problemDetails.Correo; Cedula = problemDetails.Cedula; Especialidad = problemDetails.speciality; Ciudad = problemDetails.Ciudadperfil; Plan = problemDetails.Plan; Specialities = problemDetails.Specialities;
模型JsonProperty配置
[JsonProperty("specialities")] public string[] Specialities { get; set; }
接口返回的JSON片段
{ "firstName": "Juan Sebastián ", "lastName": "Mario mena ", "email": "jdsa@lsddsdex.ec", "phone": "099434346840", "city": "59cda262fe728437ce90ff81", "isDelete": false, "specialities": [ "5990d6ff3da48f4bd98c6914", "5990d7273da48f4bd98c6918", "5990d75a3da48f4bd98c691d", "5a0a6087257e970afc9a9e73", "5a0a60ac257e970afc9a9e76", "5a13ecaf64de49704797d727" ], "role": "5a0a60a3257e970afc9a9e75" }
排查情况
遍历Specialities数组时能正确获取到每个字符串值,说明数据已经正确绑定到ViewModel的属性中,问题出在ListView的ItemTemplate配置上。
最终解决方案
修改ListView的ItemTemplate,用ViewCell包裹Label替代原来的TextCell,同时指定x:DataType为sys:String(需提前在XAML根节点引入命名空间:xmlns:sys="clr-namespace:System;assembly=mscorlib"):
<ListView ItemsSource="{Binding Specialities, Mode=TwoWay}"> <ListView.ItemTemplate> <DataTemplate x:DataType="sys:String"> <ViewCell> <Label Text="{Binding .}" HorizontalOptions="EndAndExpand" TextColor="#503026" /> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView>
注:原解决方案代码中的Specialitiess应为笔误,实际需与ViewModel中的属性名Specialities保持一致。
内容的提问来源于stack exchange,提问作者Oswaldo Roosemberg
相关产品推荐
相关产品推荐

