ObservableCollection 列表找不到方法 AddRange
Posted
技术标签:
【中文标题】ObservableCollection 列表找不到方法 AddRange【英文标题】:ObservableCollection list is unable to find method AddRange 【发布时间】:2021-05-06 22:48:02 【问题描述】:我正在使用 Xamarin.Forms MVVM 和 sqlLite-net 来制作共享移动应用程序。
我收到一个错误,因为 ObservableCollection 中不存在“AddRange”,或者我使用该函数有误。
我要做的就是填写我的 ObservableCollection 列表。我必须手动添加使用循环吗?它奇怪的 ObservableCollection 有一个“添加”方法,但无法填充
错误:“ObservableCollection”不包含“AddRange”的定义,并且找不到接受“ObservableCollection”类型的第一个参数的可访问扩展方法“AddRange”(您是否缺少使用指令还是程序集引用?)
使用以下参考:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using TestApp01_MVVM_Basic.Models;
using Xamarin.CommunityToolkit.ObjectModel;
using Xamarin.Forms;
using System.Collections.Specialized;
using TestApp01_MVVM_Basic.Services;
using System.Collections.Generic;
using System.Linq;
下面我正在创建我的 ObservableCollection。我在线收到错误:AddRange()
public ObservableCollection<ProductModel> ProductsList get; set;
public ProductViewModel()
ProductsList = new ObservableCollection<ProductModel>();
public async Task MyDisplayList()
var getData = ProductService.DisplayProduct();
ProductsList.AddRange(getData);
在服务类中,我有以下 DisplayProduct() 方法。从数据库返回一个列表
public static async Task<IEnumerable<ProductModel>> DisplayProduct()
await Init();
var GetProduct = await db.Table<ProductModel>().ToListAsync();
return GetProduct;
【问题讨论】:
System.Collections.ObjectModel.ObservableCollection<T>
没有 AddRange
方法。您可以改用InsertItem
。这里是docs
***.com/questions/670577/…
【参考方案1】:
您要查找的内容是在 Xamarin 社区工具包包上实现的:ObservableRangeCollection 哪个子类System.Collections.ObjectModel.ObservableCollection<T>
,您可以使用ObservableRangeCollection<ProductModel>
而不是ObservableCollection<ProductModel>
,因为后者没有实现这种方法。
public ObservableRangeCollection<ProductModel> ProductsList get; set;
public ProductViewModel()
ProductsList = new ObservableRangeCollection<ProductModel>();
public async Task MyDisplayList()
var getData = await ProductService.DisplayProduct();
ProductsList.AddRange(getData);
public static async Task<IEnumerable<ProductModel>> DisplayProduct()
await Init();
var GetProduct = await db.Table<ProductModel>().ToListAsync();
return await Task.FromResult(GetProduct);
【讨论】:
谢谢,现在说得通了。问题我在网上遇到错误:ProductsList.AddRange(getData);。关于无法从 System.Threading.Tasks.Task 转换为 system.collection.generice.IEumerableDisplayProduct
是异步方法,调用时需要使用await
感谢@Jason 指出这一点,我没注意到
@ikhlasahmed 如果这是您问题的实际答案,请将上面的答案标记为答案
@ikhlasahmed getData需要实现IEnumerable<T>
看AddRange(...)的定义以上是关于ObservableCollection 列表找不到方法 AddRange的主要内容,如果未能解决你的问题,请参考以下文章
WPF ObservableCollection 异步调用问题
ObservableCollection 列表找不到方法 AddRange