c# - 将列表转换为 ObservableCollection
问题描述
我需要将从 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; }
}
解决方案
要从 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 的第一个构造函数参数传递。