Xamarin Forms ListView绑定后空白 绑定字段不显示问题求助
Xamarin Forms ListView 渲染空白修复方案
你的代码有三处直接导致列表无法加载的硬错误,按下面的说明改完就能正常显示:
- 生命周期方法调用逻辑完全错误:
OnAppearing是页面框架自动调用的生命周期方法,只能通过重写实现,禁止在构造函数里直接调用base.OnAppearing(),这会直接打乱页面的渲染执行流程,导致控件无法正常绘制。 - C#语法错误:
ObservableCollection的泛型声明缺闭合括号、集合构造语句末尾多写了分号,这两个语法问题会导致集合根本无法正确初始化,运行时直接抛出异常,数据压根没加载到内存里。 - 绑定时序错误:你先给页面设置了
BindingContext = this,之后才初始化Products集合,而且Products属性没有做属性变更通知,XAML绑定系统第一次解析ItemsSource的时候拿到的是null值,后续你给Products属性赋新值的时候绑定系统感知不到变化;同时你既在XAML里写了ItemsSource绑定,又在后台代码里手动给ListView.ItemsSource赋值,重复设置容易引发状态不一致。
修复后的完整后端C#代码
直接替换你原来的后端代码即可:
using ListPageExample; using System; using System.Collections.ObjectModel; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace ListPageExample { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class ProductListPage : ContentPage { // 修复泛型声明缺括号的问题 public ObservableCollection<Product> Products { get; set; } public ProductListPage() { InitializeComponent(); // 先初始化数据集合,再设置绑定上下文,保证绑定第一次读取就能拿到有效集合 Products = new ObservableCollection<Product> { new Product() { Id = 1, Name = "Sprite", Price = 20, ImageUrl= "bafomete.jpg"}, new Product() { Id = 2, Name = "Coca Cola", Price = 20, ImageUrl = "bafometa.jpg" }, new Product() { Id = 3, Name = "Fanta", Price = 20, ImageUrl = "bafomete.jpg" }, new Product() { Id = 4, Name = "Fanta Uva", Price = 20, ImageUrl = "bafometa.jpg" } }; BindingContext = this; // 删掉构造函数里错误调用的base.OnAppearing() // 已经在XAML里配置了ItemsSource绑定,不需要后台再重复赋值 } // 正确重写OnAppearing方法,框架会自动调用,不需要手动触发 protected override void OnAppearing() { base.OnAppearing(); } private void ProductListView_ItemTapped(object sender, ItemTappedEventArgs e) { if(e.Item == null) return; ((ListView)sender).SelectedItem = null; Navigation.PushModalAsync(new NewItemPage(e.Item as Product)); } } }
XAML说明
你贴的XAML代码没有结构性错误,标签闭合正常,其中SeparatorVisibility="None"是隐藏列表分割线的配置,不需要可以保留,不会影响列表项显示。如果修复后文字正常显示但图片加载不出来,检查几个jpg图片是否放到了各平台对应资源目录、生成操作配置正确即可。
你说新建其他XAML页面也有同样不显示的问题,基本都是复制了错误的构造函数逻辑导致的,参照上面的写法,保证先初始化绑定数据再设置BindingContext、不要乱调用生命周期方法,就不会出现全空白的问题。
内容的提问来源于stack exchange,提问作者Charlois Gonçalves
相关产品推荐
相关产品推荐

