将列表转换为ObservableCollection

时间:2018-05-06 17:47:52

标签: c# xamarin

我需要将我从api调用获得的列表转换为ObservableCollection以放入我的图表。

我尝试了这两种方法:

方法1:

ObservableCollection<ChartDataModel> test = new ObservableCollection<ChartDataModel>(_CoinHistoryGraph as List<CoinHistoryModel>);
方法1上的

错误:

cannot convert from 'System.Collections.Generic.List<CoinMarketCap.SHARED.Models.CoinHistoryModel>' to 'System.Collections.Generic.List<CoinMarketCap.SHARED.ViewModels.ChartDataModel>'    CoinMarketCap.SHARED    

方法2:

CoinHistory = _CoinHistoryGraph.Select(x => new ChartDataModel(float.Parse(x.price_btc), double.Parse(x.timestamp)));
方法2上的

错误:

'System.Collections.Generic.IEnumerable<CoinMarketCap.SHARED.ViewModels.ChartDataModel>' to 'System.Collections.ObjectModel.ObservableCollection<CoinMarketCap.SHARED.ViewModels.ChartDataModel>'.

型号:

 public class GraphModel
{
    public GraphModel(float pricebtc, double time_stamp)
    {
        price_btc = pricebtc;
        timestamp = time_stamp;
    }

    public float price_btc { get; set; }
    public double timestamp { get; set; }
}

  public class CoinHistoryModel
{
    public string name { get; set; }
    public string price_btc { get; set; }
    public string timestamp { get; set; }

}

2 个答案:

答案 0 :(得分:2)

要从CoinHistoryModel列表创建ObservableCollection,最好使用此代码:

CoinHistory = new ObservableCollection<ChartDataModel>(_CoinHistoryGraph.Select(x => new ChartDataModel(float.Parse(x.price_btc), double.Parse(x.timestamp))));

您的第一段代码不起作用,因为您想要从CoinHistoryModel类型的集合中创建ChartDataModel类型的ObservableCollection。
关于你的第二段代码,错误信息足够清晰。您希望将IEnumerable对象显式地转换为ObservableCollection 要从type1的集合创建type1的ObservableCollection,可以将集合作为ObservableCollection的第一个构造函数参数传递。

答案 1 :(得分:0)

new ObservableCollection<T>中的通用参数需要与传递给构造函数的IEnumerable<T>List<T>的泛型参数相匹配。因此,您需要传递List<ChartDataModel>,而不是List<GraphModel>List<CoinHistoryModel>