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

Xamarin.Forms ListView触发System.ArgumentOutOfRangeException异常问题

问题分析与解决方案

可能的原因

  • Dashboard页面的ListView绑定集合,在第二次导航返回时未正确刷新,或刷新时机滞后于UI渲染,导致ListView试图访问集合中不存在的索引
  • 首次导航时页面为全新实例,集合初始化正常;第二次导航复用旧页面实例,集合未重新加载,数据库新增数据后集合与UI状态不一致
  • ListView的SelectedItem绑定了已失效的条目,导航返回时触发索引检查报错

解决方案

1. 页面生命周期中强制刷新数据集合

在Dashboard页面的OnAppearing方法里,重新从数据库加载最新数据,使用ObservableCollection确保UI能收到更新通知:

// DashboardViewModel.cs
public ObservableCollection<YourModel> Items { get; set; } = new ObservableCollection<YourModel>();
private readonly YourDbService _dbService;

public DashboardViewModel(YourDbService dbService)
{
    _dbService = dbService;
}

public async Task LoadItems()
{
    Items.Clear();
    var latestItems = await _dbService.GetAllItems();
    foreach (var item in latestItems)
    {
        Items.Add(item);
    }
}
// DashboardPage.xaml.cs
protected override async void OnAppearing()
{
    base.OnAppearing();
    if (BindingContext is DashboardViewModel vm)
    {
        await vm.LoadItems();
    }
}

2. 导航传递参数触发数据加载

修改导航代码,传递刷新参数让DashboardViewModel主动刷新:

// 你的Store方法修改
async Task Store()
{
    // 数据库操作逻辑
    await Shell.Current.GoToAsync($"/dashboard?refresh=true");
}
// DashboardViewModel.cs
private bool _refresh;
[QueryProperty(nameof(Refresh), "refresh")]
public bool Refresh
{
    get => _refresh;
    set
    {
        _refresh = value;
        if (_refresh)
        {
            _ = LoadItems();
            Refresh = false; // 重置参数避免重复触发
        }
    }
}

3. 重置ListView的SelectedItem

如果绑定了SelectedItem,导航返回前重置该值,避免指向已不存在的条目:

public async Task LoadItems()
{
    SelectedItem = null; // 重置选中项
    Items.Clear();
    var latestItems = await _dbService.GetAllItems();
    foreach (var item in latestItems)
    {
        Items.Add(item);
    }
}

4. 禁用页面缓存强制创建新实例

在AppShell的路由配置中禁用页面缓存,确保每次导航都生成新的Dashboard页面实例:

<ShellContent Route="dashboard" ContentTemplate="{DataTemplate local:DashboardPage}" NavigationCacheMode="Disabled" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:45:48