【问题标题】:ObservableCollection list is unable to find method AddRangeObservableCollection 列表找不到方法 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;
    }

【问题讨论】:

标签: c# xamarin xamarin.forms


【解决方案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(...)的定义
猜你喜欢
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多