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

Xamarin.Forms更新后ObservableCollection的set与集合变更事件触发问题

Xamarin.Forms ObservableCollection 集合更新问题及解决方法

问题描述

程序中使用列表展示数据,希望获取新信息时无需将ItemSource设为Null即可更新列表,因此采用推荐的ObservableCollection方案。初期使用Xamarin.Forms(5.0.0.2196)和Xamarin Essentials(1.7.0)时,调用ObservableCollection会触发get代码块,增删元素会触发set代码块,代码示例如下:

ObservableCollection<Class> list = new ObservableCollection<Class>();
public ObservableCollection<Class> List
{
     get => list;
     set 
     {
          {...}
     }
}

但将Xamarin.Forms和Xamarin Essentials更新至最新版本后,ObservableCollection的set代码块不再触发。需要了解如何触发set代码或OnCollectionChanged代码,以及新的属性构造器编写方式。

解决方法

绑定集合变更事件

要监听集合内元素的增删变更,只需在页面ViewModel的构造函数中添加CollectionChanged事件绑定:

public PageVM 
{
     list.CollectionChanged += List_CollectionChanged;
}

private void List_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    // 此处编写集合变更后的处理逻辑,方法可通过按Tab键自动生成
    {...}
}

set代码块触发场景

当直接为整个ObservableCollection属性赋值时,会触发set代码块,示例如下:

ObservableCollection<string> list = new ObservableCollection<string> ();
public ObservableCollection<string> List 
{
     get => list;
     set 
     {
         list = value;
         {...}
     }
}
// 赋值操作会触发set代码块
ObservableCollection<string> List2 = new ObservableCollection<string> { "e", "f", "g" };
List = List2;

元素增删触发事件场景

使用.Add()或.Remove()方法修改集合内元素时,会触发CollectionChanged事件,示例如下:

// 添加元素触发集合变更事件
List.Add("g"); 
// 删除元素触发集合变更事件
List.Remove("a");

特殊场景处理

若在同一方法中先给ObservableCollection赋值,之后再增删元素,此时增删操作不会触发集合变更事件,需手动调用OnPropertyChanged(nameof(List))通知UI更新:

public void MethodThatChangesObservableObject()
{
     List = List1;
     // 此处会触发set代码块
     
     List.Add("w");
     List.Remove("a");
     // 此时添加和删除操作均不会触发集合变更事件

     OnPropertyChanged(nameof(List));
     // 手动通知Xamarin.Forms刷新UI
}

注意:如果在List = List2;赋值操作之前增删ObservableCollection的元素,事件会正常触发;但同一方法中赋值后再修改集合,就需要手动调用上述方法通知UI更新。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04