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&lt;T&gt; 没有 AddRange 方法。您可以改用InsertItem。这里是docs ***.com/questions/670577/… 【参考方案1】:

您要查找的内容是在 Xamarin 社区工具包包上实现的:ObservableRangeCollection 哪个子类System.Collections.ObjectModel.ObservableCollection&lt;T&gt;,您可以使用ObservableRangeCollection&lt;ProductModel&gt; 而不是ObservableCollection&lt;ProductModel&gt;,因为后者没有实现这种方法。

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.IEumerable DisplayProduct是异步方法,调用时需要使用await 感谢@Jason 指出这一点,我没注意到 @ikhlasahmed 如果这是您问题的实际答案,请将上面的答案标记为答案 @ikhlasahmed getData需要实现IEnumerable&lt;T&gt;看AddRange(...)的定义

以上是关于ObservableCollection 列表找不到方法 AddRange的主要内容,如果未能解决你的问题,请参考以下文章

WPF ObservableCollection 异步调用问题

ObservableCollection 列表找不到方法 AddRange

将列表框绑定到 ObservableCollection

为啥分配给 ObservableCollection 不会破坏 CollectionChanged 订阅者列表?

ObservableCollection刷新视图MVVM

ObservableCollection CollectionChanged 更新数据网格