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

Xamarin.Forms中如何从JSON文件加载数据填充CollectionView

Xamarin.Forms 替换ListView为CollectionView实现指定格式数据展示

前置说明

你可以选择两种实现方案:

  • 优化方案:直接绑定实体类,后续扩展维护更方便(推荐)
  • 兼容方案:保留原有拼接字符串的逻辑,代码改动量最小

方案1:推荐的实体绑定实现

第一步:确认反序列化实体类定义

确保你用于JSON反序列化的实体类结构正确,示例定义如下:

// 单条库存数据实体
public class InventarioItem
{
    public string N_PARTE { get; set; }
    public string DESCRIPCION { get; set; }
    public string INV_EXISTE { get; set; }
    public string UNI_MEDIDA { get; set; }
}

// 接口返回根实体
public class entrada
{
    public string response { get; set; }
    public List<InventarioItem> Data { get; set; }
}

第二步:调整页面后台绑定逻辑

修改集合类型与填充逻辑:

// 绑定集合类型从string改为实体类
public ObservableCollection<InventarioItem> itemlist;    
public MainPage()
{
    InitializeComponent();
    itemlist = new ObservableCollection<InventarioItem>();
    // CollectionView的x:Name设为collectionParts
    collectionParts.ItemsSource = itemlist;
}

// 反序列化后的填充逻辑
var msjdes = JsonConvert.DeserializeObject<entrada>(responseText);
string rspserver = msjdes.response;
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
    if(rspserver == "OK")
    {
        itemlist.Clear();
        foreach (var item in msjdes.Data)
        {
            // 直接添加实体,无需拼接字符串
            itemlist.Add(item);
        }
    }
}

第三步:编写XAML端CollectionView布局

替换原有ListView为如下CollectionView定义,完全匹配你要求的展示格式:

<CollectionView x:Name="collectionParts" Margin="10">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout Spacing="3">
                <!-- 顶部分割线 -->
                <BoxView HeightRequest="1" BackgroundColor="Gray" HorizontalOptions="Fill"/>
                <Label Text="PARTE: {Binding N_PARTE}" Margin="2"/>
                <Label Text="DESC: {Binding DESCRIPCION}" Margin="2"/>
                <Label Text="INV: {Binding INV_EXISTE}" Margin="2"/>
                <Label Text="MEDIDA: {Binding UNI_MEDIDA}" Margin="2"/>
                <!-- 底部分割线 -->
                <BoxView HeightRequest="1" BackgroundColor="Gray" HorizontalOptions="Fill"/>
            </StackLayout>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

方案2:兼容原有拼接字符串逻辑

如果不想改动现有后台拼接逻辑,只需修改XAML部分即可:

XAML代码

<CollectionView x:Name="listparts" Margin="10">
    <CollectionView.ItemTemplate>
        <DataTemplate>
            <StackLayout Spacing="3">
                <BoxView HeightRequest="1" BackgroundColor="Gray" HorizontalOptions="Fill"/>
                <!-- 直接绑定拼接好的字符串 -->
                <Label Text="{Binding .}" Margin="2"/>
                <BoxView HeightRequest="1" BackgroundColor="Gray" HorizontalOptions="Fill"/>
            </StackLayout>
        </DataTemplate>
    </CollectionView.ItemTemplate>
</CollectionView>

注意

原有后台代码无需任何修改,可直接运行。

补充说明:CollectionView仅支持Xamarin.Forms 4.0及以上版本,如版本过低请先升级Xamarin.Forms NuGet包

内容的提问来源于stack exchange,提问作者Manny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:06:03