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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:17:12